之前我已經介紹過了關於跨iframe的window.event的文章,有興趣可以看下,
http://www.css-js.cn/javascript/ie-iframe-window-event.html
IE的每個elem節點都會擁有一個onreadystatechange事件,這個事件每次在elem內容發送變化的時候觸發,
比如內容正在載入loading會觸發,內容載入完畢loaded會觸發,內容載入成功complete會觸發,
這個函數還需要配合readyState,這是ie上每個elem都擁有的屬性,用來查看每次觸發時候的狀態。
|
//先為iframe 添加一個 onreadystatechange iframe.attachEvent("onreadystatechange", function(){ //此事件在內容沒有被載入時候也會被觸發,所以我們要判斷狀態 //有時候會比較怪異 readyState狀態會跳過 complete 所以我們loaded狀態也要判斷 if(iframe.readyState === "complete" || iframe.readyState == "loaded"){ //代碼能執行到這裡說明已經載入成功完畢了 //要清除掉事件 iframe.detachEvent( "onreadystatechange", arguments.callee); //這裡是回呼函數 } }); |
//先為iframe 添加一個 onreadystatechange iframe.attachEvent("onreadystatechange", function(){ //此事件在內容沒有被載入時候也會被觸發,所以我們要判斷狀態 //有時候會比較怪異 readyState狀態會跳過 complete 所以我們loaded狀態也要判斷 if(iframe.readyState === "complete" || iframe.readyState == "loaded"){ //代碼能執行到這裡說明已經載入成功完畢了 //要清除掉事件 iframe.detachEvent( "onreadystatechange", arguments.callee); //這裡是回呼函數 } }); |
編輯代碼重設運行代碼 |
在其他非IE的瀏覽器上 Firefox,Opera,chrome等 iframe 都會擁有一個 onload 事件,此事件只要觸發就說名內容已經載入完畢。
|
iframe.addEventListener( "load", function(){ //代碼能執行到這裡說明已經載入成功完畢了 this.removeEventListener( "load", arguments.call, false); //這裡是回呼函數 }, false); |
iframe.addEventListener( "load", function(){ //代碼能執行到這裡說明已經載入成功完畢了 this.removeEventListener( "load", arguments.call, false); //這裡是回呼函數 }, false); |
編輯代碼重設運行代碼 |
注意:1.如果是動態建立的iframe,此函數必須放在 iframe 被appendChild到body,否則不會被觸發
2.如果是靜態iframe 一般 onload 不會被觸發,造成一樣的原因是因為iframe載入太快導致,所以上述辦法不適合。