为了账号安全,请及时绑定邮箱和手机立即绑定

关于DOMReady的IE兼容实现,为什么说有了doScroll之后更接近DOMContentLoaded

(function () {
    try {
        // DOM树未创建完之前调用doScroll会抛出错误
        d.documentElement.doScroll('left');
    } catch (e) {
        //延迟再试一次~
        setTimeout(arguments.callee, 50);
        return;
    }
    // 没有错误就表示DOM树创建完毕,然后立马执行用户回调
    init();
})();

//监听document的加载状态
d.onreadystatechange = function() {
    // 如果用户是在domReady之后绑定的函数,就立马执行
    if (d.readyState == 'complete') {
        d.onreadystatechange = null;
        init();
    }
}

在没有doScroll之前勉强用onreadystatechange,有了doScroll之后更接近DOMContentLoaded的实现。
问题:只用onreadystatechange实现有什么问题?
      只用doScroll不行吗?


正在回答

4 回答

566f865f0001094905000088.jpghttp://img1.sycdn.imooc.com//566f874a00011f7a09080336.jpg

可能有这方面原因 个人理解 仅供参考

0 回复 有任何疑惑可以回复我~
#1

牛金斯基 提问者

document.readyState == "complete" 用来判断文档有无加载完毕, doScroll 用来判断DOM树是否构建完毕,DOMReady的目的是在DOM树构建完成之后,文档加载完毕前,进行DOM的操作。既然doScroll 可以完成这个目的,为什么还要document.readyState的参与呢,不是多此一举吗? 我的理解是:如果doScroll中setTimeout 定时时间长了,而document在DOM树构建完后又很快加载完成,快到下一次定时到来前,此时为了第一时间执行,所以把onreadystatechange事件加上。但是定时时间可以改小嘛,还是想不通。
2015-12-15 回复 有任何疑惑可以回复我~
#2

昵称还是已占用 回复 牛金斯基 提问者

在IE中如果是frame框架 是使用 onreadystatechange,不是fame用 doSroll
2015-12-15 回复 有任何疑惑可以回复我~

我觉得init函数只执行一次,两个判断那个先完成,就执行哪一个。执行更保险点

0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//5670103500012bbc07170281.jpg

又看了下视频 ,视频中也说了一下

0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//566f8adf0001690409740533.jpg

添加一段  图片来自javascript高级程序设计

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于DOMReady的IE兼容实现,为什么说有了doScroll之后更接近DOMContentLoaded

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信