functionmyReady(cb){
//判断是否是现代浏览器if(document.addEventListener){
document.addEventListener("DOMContentLoaded", cb, false);
}else{
IEContentLoaded(cb);
}
functionIEContentLoaded(){
vard = window.document;
vardone = false;
//确保cb只执行一次varinit = function(){
if(!done){
done = true;
cb();
}
}
/*
下面的一个关于doScroll的hack和一个对onreadystatechange事件的监听函数,看似在功能上一致,都是为了判断在老版本IE中DOM树是否加载完成并在加载完成后第一时间调用所要执行的函数,但是对于doScroll的hack是每间隔一段时间就调用自身重复判断,而在这间隔时间中DOM树可能就已经构造完毕,所以还需要加上个对于readyState
的监听函数,通过这两段代码的不断轮询,就能尽可能的逼近DOM树刚刚构造完成的时间点从而提高执行效率。onreadystatechange事件是当在readyState属性发生改变之时触发的,所以一旦DOM树构造完毕,onreadystatechange事件将不再被触发,所以需要对于doScroll的hack
来实现在DOM树构造完毕之后对于IEContentLoaded方法的正常执行。*/(function(){
try{
//DOM树未加载完时调用doScroll会抛出错误d.documentElement.doScroll('left');
}catch(e){
setTimeout(arguements.callee, 50);
return;
}
init();
})()
//监听document的加载状态document.onreadystatechange = function(){
if(document.readystate === 'complete'){
//如果是在domReady之后调用的函数则立即执行document.onreadystatechange = null;
init();
}
}
}
}
domReady的实现
最新推荐文章于 2021-12-15 14:02:22 发布