Modernizr何时加载脚本?

时间:2012-11-19 02:21:17

标签: javascript jquery 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作为库。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您想在测试结果为真时看到第二条日志消息,那么您的意思是if (mod_PPfix)吗?如果测试失败,您的版本将记录输出第二条消息(请参阅此fiddle

当您使用Modernizr.load时,事情会异步发生,因此第二个<script>可能会在script1.js和script2.js完成加载之前运行,因此会在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
}