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(){ }
作者最新文章
anime.js 快速入门:怎么引入库并编写第一个 DOM 动画
2026-11-05 14:22:43
在线JS解密后变量名仍乱码?结合浏览器DevTools调试还原
2026-11-04 20:26:01
怎么在浏览器中运行JavaScript代码并查看输出结果
2026-11-04 09:07:33
JS 获取屏幕分辨率:window.screen.width 与 height 用法
2026-11-04 08:52:48
为什么推荐用DOMContentLoaded代替window.onload初始化JS
2026-11-04 08:42:33
