2012-11-19 49 views
1

我已经实现了这个代码:Modernizr何时加载脚本?

<script> 
     var mod_PPfix = false; 

     Modernizr.load({ 
      test: Modernizr.csstransitions && Modernizr.input.required, 
      nope: ['script1.js', 'script2.js'], 
      complete: function() { 

       mod_PPfix = true; 
       console.log('ppfix'); 
      } 
     }); 
</script> 

几行字后,我已经放在这个脚本等

<script>    
    if (!mod_PPfix) { 
     $(document).ready(function() { 

      console.log('this should be seen only if modernizr's tests are true'); 
     }); 
    } 
</script> 

现在我真的javascript中的菜鸟,但我预计,从上面的代码只有在modernizr测试结果为真时才显示第二个console.log()。即使测试结果为负数,仍会记录第二个日志。

据我所知,在控制台第二个console.log()消息出现在第一个说'ppfix'之前,所以我猜这应该是一种加载时间问题,但我真的不知道为什么。我究竟做错了什么?

如果它可以帮助我使用jquery作为库。

谢谢!

回答

0

如果您想在测试成立时看到第二条日志消息,那么您的意思是if (mod_PPfix)?您的版本将日志输出第二个消息,如果试验失败(见本fiddle

当您使用Modernizr.load事情同步发生如此前script1.js和script2.js完成加载,因此之前的第二<script>可能运行complete回调火灾。无论你想在第二个<script>中做什么,你都应该调用complete回调。例如

Modernizr.load({ 
     test: Modernizr.csstransitions && Modernizr.input.required, 
     nope: ['script1.js', 'script2.js'], 
     complete: function() { 
      initialize_me(); 
     } 
    }); 

initialize_me()功能会被其他地方定义,并有可能有一些代码看起来像

if (Modernizr.csstransitions && Modernizr.input.required) { 
    // Use CSS3 
} else { 
    // Do things that depended on script1.js and script2.js being loaded 
} 
+0

**不要你的意思是,如果(mod_PPfix)?**对不起它的有点曲折我知道,我的意思是“如果modernizr验证这两个专长都没有实现,那么它会加载我列出的2个脚本并设置为mod_PPfix = true”。只有在两者都不支持的情况下,才加载脚本并执行完整的功能。 如果功能结果支持,那么他什么也不做,没有脚本加载,也不会执行完整的功能。 我发布的代码与我的意思是否正确? – Gruber

+0

_What你想要在第二