如何在IE瀏覽器裏模仿DomContentLoaded

稍微瞭解一點框架的事件綁定的都知道 window.onload 事件須要在頁面全部內容(包括圖片、flash、iframe等)加載完後,才執行,但每每咱們更但願在 DOM 一加載完就執行腳本,而各大框架都提供了這樣的方法,今天就討論下其中的原理。瀏覽器

標準瀏覽器都提供了一個DomContentLoaded事件來實現,咱們只須要註冊相應的事件就能夠了,而在IE瀏覽器裏則須要模仿實現。框架

IE瀏覽器裏最先的解決方案是綁定document.onreadystatechange事件,判斷readyState是否爲complete,可是當頁面有iframe時就沒法及時觸發了(等到iframe加載完畢readyState的值纔會變爲complete)函數

而以後有了一種利用 doScroll() 方法來模擬 addDOMLoadEvent 事件的方案,且如今主流的 JavaScript 框架(JQuery、YUI,kissy等)基本都採用的這一解決方案。doScroll判斷頁面是否能夠滾動,若是能夠滾動,那麼就意味着文檔加載完畢了。測試

kissy裏面的判斷:spa

doScroll

doScrollblog

標準瀏覽器的綁定:事件

w3c

這裏要說明的是在觸發了DomContentLoaded這個事件以後就會取消該事件,避免反覆觸發,以後就去執行綁定在ready方法上的全部函數了圖片

而IE瀏覽器下的綁定大同小異,換成了onreadystatechange而已ip

可是僅僅綁定是不夠的,下面還要判斷是否在有iframe的頁面內,在iframe中則經過document的onreadystatechange來實現,不然經過不斷測試doScroll是否可用來實現。不過經測試(本人未測試過),即便是在iframe中,doScroll依然有文檔

相關文章
相關標籤/搜索