问答详情
源自:3-4 domReady的实现

在ie下还是会刷新页面呀,大家也帮我测试一下,帮我看一下哪有问题

/**
* Created by Administrator on 2015/11/24.
*/
var myReady = function(fn){
   //对于现代浏览器,对DOMContentLoaded事件的处理是采用标准的事件绑定方式
   if(document.addEventListener){//通过能力检测区分
       document.addEventListener("DOMContentLoaded", fn(), false);
   }else{
       IEContentLoaded(fn);
   }
   //IE下模拟定义DOMContentLoaded
   function IEContentLoaded(fn){
       var d = window.document; //将dom缓存在一个变量里
       var done = false;
       //只执行一次的回调函数 init()
       var init = function(){
           if(!done){
               dan = true;
               fn();
           }
       };
       (function(){//立即调用表达式
           try{
               //DOM树还未创建完之前会抛出错误
               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();
           }
       };

   }
};

提问者:qq_东东_3 2015-11-24 16:00

个回答

  • 慕男婶
    2015-11-24 16:09:41
    已采纳

    1、我并没有看到你在哪儿定义了一个变量叫做,蛋

         dan

         var init = function(){
               if(!done){
                   dan = true; // 这个蛋是从哪儿来的 ???
                   fn();
               }
           };


    2、 document.addEventListener("DOMContentLoaded", fn(), false);

    应该写成

        document.addEventListener("DOMContentLoaded", fn, false);

  • qq_东东_3
    2015-11-24 16:58:09

    找到问题了,谢谢