作者hermitwhite (不存在的騎士)
看板Ajax
標題[問題] 如何偵測iframe正在要求新網頁
時間Wed Aug 8 17:09:05 2012
這個問題也就是要如何讓iframe像IE中的onreadystatechange一樣,在
開始讀取的時候觸發event。我不希望使用者在另開視窗(可能是按滑鼠中鍵
或基於瀏覽器設定)的時候觸發,所以這個動作必須由iframe本身觸發,不
能用在連結上加onclick的方式處理。
目前我會做的是定時確認:
var i = 0;
var t = setInterval(function(){
if(目標iframe.contentWindow.document.readyState != 'complete'){
顯示本網頁正在讀取中的文字;
clearInterval(t);
}else if(i == 300){clearInterval(t)}
else{i++;}
}, 50);
這是一個在iframe讀取完成前顯示讀取中的功能(實際的樣子可以參考
我簽名檔的網站),當按下任何站內連結之後就會觸發上面的code,然後確
認目標iframe是否開始讀取。這在IE中表現如同預期,但Chrome和Firefox
中卻不會很快觸發;在仔細觀察後發現這兩個瀏覽器在server開始回應之前
似乎iframe的readystate都會一直處於complete狀態。結果只會看到這個讀
取中的文字一閃即逝;我還怕偶然網頁讀取太快會剛好遇到setInterval沒
抓到的情況所以把時間設得很短。請問還有沒有其他方法可以確認iframe正
在要求新網頁,來解決這個問題呢?
--
Il Cavaliere Inesistente
http://dejavu.blogdns.org/
騎士是種一旦失去存在的意義,就會崩解消失的東西
因此他們的一生總在追求著某些事物,以維持自己的存在
如果有了存在的理由,即使是一副空的鎧甲,也可以成為騎士
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.253.87.143
1F:推 eight0:window.postMessage可以跟iframe溝通 不能cross domain 08/08 17:32
2F:→ eight0:對不起我錯了~ 應該是可以的 08/08 17:39
3F:→ hermitwhite:不太了解,這要怎麼用來監聽iframe的狀態呢? 08/08 18:12
4F:→ tyf99:<iframe onload=""> 非w3c標準,但多數瀏覽器都支援 08/08 20:16
5F:→ tyf99:點任何連結就讓它顯示讀取中,onload觸發後關掉訊息 08/08 20:19
6F:→ hermitwhite:第一段我有說明這個動作不能用click觸發,我需要的是 08/08 20:25
7F:→ hermitwhite:在click後能馬上觸發、但監聽對象不是被click的物件而 08/08 20:26
8F:→ hermitwhite:是iframe的動作。 08/08 20:28
9F:→ tyf99:可以試著在 iframe 加上 onloadstart listener 看看 08/08 20:30
10F:→ hermitwhite:onloadstart看起來是我要的東西,但好像iframe不行。 08/09 01:01
11F:→ tyf99:iframe.contentDocument.body 綁 click() 08/09 12:57
12F:→ tyf99:click() 觸發檢查 location.href 是否跟 click 之前不同 08/09 12:59
13F:→ hermitwhite:location也和readystate改變的時機一樣,是回應才動呢 08/09 18:37
14F:推 eight0:試試看onunload吧 不過不要用iframe可能會比較好 08/10 01:25
15F:→ hermitwhite:其實我要做的東西現在用pjax會比較好,不過都已經開發 08/10 08:56
16F:→ hermitwhite:這麼久了有點丟不掉...加上pjax作者不願增加對IE的支 08/10 08:57
17F:→ hermitwhite:援(我認同他對網路標準的理念但不想放掉IE這塊),所 08/10 09:00
18F:→ hermitwhite:以只好在原本的基礎上繼續做了。 08/10 09:00
19F:→ hermitwhite:我知道了,既然IE可以跑這但不能用pjax,我乾脆就分成 08/10 09:10
20F:→ hermitwhite:IE(iframe)模式和pjax模式好了(好麻煩)... 08/10 09:10