有没有办法迫使Modernizr同步加载脚本(我需要它来阻止)

时间:2014-07-18 09:54:26

标签: javascript asynchronous modernizr

这可能是一个奇怪的问题,但我遇到了问题,我可以解决它,但我只是想知道是否有更优雅的方式。基本上,我需要知道我是否可以使modernizr.load()工作同步而不是异步。

代码看起来像这样(前面的半伪代码)......


INDEX.HTML

<script src="jquery.js"></script>
<script src="modernizr-with-yepnope.js">

<script>
  var App = {};
  (function($)) {
    $(function() {
      initAllAppMethods();
    });
  })(jQuery);
 </script>

 <script>
   modernizr.load([
     {
       test: 'window.matchmedia',
       nope: 'polyfillmatchmedia.js'
     },
     'script.js'
     ]);
 </script>

的script.js

 <script>
   App.myAppmethod = function() {
     // ...
   }
 </script>

现在,我遇到的问题是由于modernizr.load的异步性质,$ .ready函数在我的App方法实际添加到App对象之前触发(或者至少我认为是问题)。因此,实际上没有任何事情发生,因为当$ .ready发生时,应用程序还没有任何方法。

现在,可以通过在scripts.js中调用initAllAppMethods()来轻松解决这个问题,但这只是隐藏了加载顺序的问题。需要通过modernizr.load()加载script.js的原因是因为它需要知道polyfill是否处于活动状态。

所以......对于任何阅读这篇文章的人来说......如果你想知道我为什么不通过modernizr.load()加载所有东西,那是因为我有点受这个订单的限制,因为CMS我在其中实现这个。如果我可以使modernizr.load()加载scripts.js同步,那就不会有问题。 (我想)。

1 个答案:

答案 0 :(得分:0)

不是加载所有这些,而是​​使用yepnope的“完整”方法(Modernizr.load在引擎盖下使用的方法)

modernizr.load([{
 load: {
      test: 'window.matchmedia',
      nope: 'polyfillmatchmedia.js'
    },
   'script.js': true
 },
 complete: function() {$.ready(
    //...
 )}
 ]);
相关问题