[問題] 如何偵測iframe正在要求新網頁

看板Ajax作者 (不存在的騎士)時間13年前 (2012/08/08 17:09), 編輯推噓2(2018)
留言20則, 3人參與, 最新討論串1/1
  這個問題也就是要如何讓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

08/08 17:32, , 1F
window.postMessage可以跟iframe溝通 不能cross domain
08/08 17:32, 1F

08/08 17:39, , 2F
對不起我錯了~ 應該是可以的
08/08 17:39, 2F

08/08 18:12, , 3F
不太了解,這要怎麼用來監聽iframe的狀態呢?
08/08 18:12, 3F

08/08 20:16, , 4F
<iframe onload=""> 非w3c標準,但多數瀏覽器都支援
08/08 20:16, 4F

08/08 20:19, , 5F
點任何連結就讓它顯示讀取中,onload觸發後關掉訊息
08/08 20:19, 5F

08/08 20:25, , 6F
第一段我有說明這個動作不能用click觸發,我需要的是
08/08 20:25, 6F

08/08 20:26, , 7F
在click後能馬上觸發、但監聽對象不是被click的物件而
08/08 20:26, 7F

08/08 20:28, , 8F
是iframe的動作。
08/08 20:28, 8F

08/08 20:30, , 9F
可以試著在 iframe 加上 onloadstart listener 看看
08/08 20:30, 9F

08/09 01:01, , 10F
onloadstart看起來是我要的東西,但好像iframe不行。
08/09 01:01, 10F

08/09 12:57, , 11F
iframe.contentDocument.body 綁 click()
08/09 12:57, 11F

08/09 12:59, , 12F
click() 觸發檢查 location.href 是否跟 click 之前不同
08/09 12:59, 12F

08/09 18:37, , 13F
location也和readystate改變的時機一樣,是回應才動呢
08/09 18:37, 13F

08/10 01:25, , 14F
試試看onunload吧 不過不要用iframe可能會比較好
08/10 01:25, 14F

08/10 08:56, , 15F
其實我要做的東西現在用pjax會比較好,不過都已經開發
08/10 08:56, 15F

08/10 08:57, , 16F
這麼久了有點丟不掉...加上pjax作者不願增加對IE的支
08/10 08:57, 16F

08/10 09:00, , 17F
援(我認同他對網路標準的理念但不想放掉IE這塊),所
08/10 09:00, 17F

08/10 09:00, , 18F
以只好在原本的基礎上繼續做了。
08/10 09:00, 18F

08/10 09:10, , 19F
我知道了,既然IE可以跑這但不能用pjax,我乾脆就分成
08/10 09:10, 19F

08/10 09:10, , 20F
IE(iframe)模式和pjax模式好了(好麻煩)...
08/10 09:10, 20F
文章代碼(AID): #1G8Yor9x (Ajax)