首页 > 代码库 > DOMContentLoaded实现
DOMContentLoaded实现
IE系列直到IE9才支持DOMContentLoaded事件,对于IE8及其之前版本,如果html内没有框架,则可以采用document.documentELement.doScroll来判断
是否构建好DOM树;如果html内有框架,则利用document的onreadystatechange事件判断当前DOM树是否构建完毕(框架html内容(只是html文件)加载之后DOM树构建完毕)。
所以可以采用这种方式:
/** * 实现DomContentLoaded的兼容性 * @param callback */ var onDomContentLoaded = function(callback){ var onlyOnce = true; var onReady = function(callback){ if(onlyOnce){ onlyOnce = false; onDomContentLoaded.isDomReady = true; try{ callback(); }catch(e){ throw(new Error(‘DOM Ready callback occurs an error!‘)) } } return; } if(S.browser.isIe && !(‘HTMLElement‘ in window)){ // lt IE9 if(self.top === self){ function s(){ try{ document.documentElement.doScroll(‘left‘); onReady(callback); return; }catch(e){ setTimeout(s,50); } } s(); }else{ //包含框架 document.attachEvent(‘onreadystatechange‘,function(){ if(document.readyState === ‘complete‘){ onReady(callback); document.detachEvent(‘onreadystatechange‘,arguments.callee); } }); } document.onload = function(){ onReady(callback); document.onload = null; }; }else{ document.addEventListener(‘DOMContentLoaded‘,function(){ onReady(callback); document.removeEventListener(‘DOMContentLoaded‘,arguments.callee); },false); document.onload = function(){ onReady(callback); document.onload = null; }; } };
另外,John Resig也在《精通javascript》提出了一种方法来判断DOM是否构建完毕,那就是不断轮训判断
if(document && document.getElementById && document.getElementsByTagName && document.body)是否为true,若为true,则
DOM构建完毕。
DOMContentLoaded实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。