1. 程式人生 > >利用DOMContentLoaded判斷DOM是否載入完畢

利用DOMContentLoaded判斷DOM是否載入完畢

概述

瀏覽器提供一個document.onload事件,但這是頁面的全部資料都載入完畢,如果頁面有太多圖片的話,事件要等很久才觸發。如果能在DOM樹構建完畢就開始動作就會快很多。

核心思想

  • IE8以下的版本可以通過檢查document.documentElement.doScroll('left')是否報錯來判斷
  • IE8支援onreadystatechange事件,每當document.readyState改變的時候,就會觸發一次(所以只要在readyState的值為completed就是載入完畢)
  • IE9及其他主流瀏覽器支援DOMContentLoaded事件,直接註冊其事件處理程式即可

簡略步驟

其中DOMContentLoaded函式假設是我們的事件處理程式

在IE中

  • 先完成IE8的繫結
document.attachEvent('onreadystatechange', DOMContentLoaded);
  • 再來保證一定在load時執行
window.attachEvent('onload',DOMContentLoaded);
  • 再用考慮非frame下IE8一下版本的情況
window.frameElement == null; // 不是frame時,frameElement值為null
doScrollCheck = function () {
    try {
        document.documentElement.doScroll('left'); // 在DOM載入完前會報錯
    }
    catch {
        setTimeout(doScrollCheck, 1);
    }
}

在IE8以上的版本或其他主流瀏覽器中

  • 直接利用DOMContentLoaded事件
document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
window.addEventListener('load', DOMContentLoaded, false)

網上專門實現該功能的程式碼