JavaScript IE浏览器DOM Ready检测技巧:利用doScroll异常

作者:窗边听雨时间:2026-10-23 05:05:56浏览:290

本文介绍在IE浏览器中检测DOM加载完成的技巧。由于IE不支持DOMContentLoaded事件,可利用d.documentElement.doScroll('left')在DOM未加载时抛出异常的特性,通过轮询检测无异常时触发回调函数,实现快速执行DOM操作。

IE浏览器DOM Ready检测需求

若仅需操作DOM元素,无需等待页面所有资源加载完毕,追求更快的执行速度。


Firefox等浏览器提供DOMContentLoaded事件以解决此问题,但IE浏览器缺乏该支持。


利用doScroll异常检测机制

MSDN关于JSCRIPT的文档提及,页面DOM未加载完成时调用doScroll方法会引发异常。反向利用此特性:若调用不抛出异常,则表明DOM已加载完毕。


核心代码实现与原理

具体实现代码如下:

function IEContentLoaded (w, fn) {
var d = w.document, done = false,
// 仅执行一次
init = function () {
if (!done) {
done = true;
fn();
        }         
    };         
// 轮询检测无错误
(function () {
try {
// 在ondocumentready之前会抛出错误
d.documentElement.doScroll('left');
} catch (e) {
setTimeout(arguments.callee, 50);
return;
        }         
// 无错误,触发回调
init();
    })();         
// 力求在onload之前触发
d.onreadystatechange = function() {
if (d.readyState == 'complete') {
d.onreadystatechange = null;
init();
        }         
    };         
}

应用背景与使用示例

此函数由Diego Perini于07年发布该方法,


获得广泛认可,诸多开源框架如JQuery的ready机制均借鉴此方法。



若后续需在IE中实现DomReady,可采用此方案。



使用示例:


IEContentLoaded( document.getElementById("test") , test );



function test(){ }


作者最新文章