Firefox,Opera和基于Webkit的浏览器都有一个文档级事件DOMContentLoaded
,您可以使用监听document.addEventListener("DOMContentLoaded", fn, false)
。
在IE中更为复杂。jQuery在IE中的作用是监视onreadystatechange
文档对象的特定就绪状态,并备份document.onload事件。document.onload在DOM准备就绪之后才触发(仅当所有图像均已完成加载时),因此它仅用作备用,以防早期事件由于某种原因而无法正常工作。
如果您花一些时间在Google上搜索,则会发现执行此操作的代码。我认为最适合此操作的代码是在jQuery和YUI之类的大型框架中,因此,即使我不使用该框架,我也会在其源代码中查找技术。
这是jQuery 1.6.2源代码的主要部分document.ready()
:
bindReady: function() {
if ( readyList ) {
return;
}
readyList = jQuery._Deferred();
if ( document.readyState === "complete" ) {
return setTimeout( jQuery.ready, 1 );
}
if ( document.addEventListener ) {
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
window.addEventListener( "load", jQuery.ready, false );
} else if ( document.attachEvent ) {
document.attachEvent( "onreadystatechange", DOMContentLoaded );
window.attachEvent( "onload", jQuery.ready );
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
}
},
document.readyState
属性可以使用,尽管我不确定浏览器是否兼容...