2013-04-29 46 views
5

我想要在頭部同步加載modernizr以防止fouc。我在before/body中使用require.js來加載一些其他腳本,我希望使用modernizr進行特徵檢測等等。加載modernizr的頭部,但在require.js中使用它

什麼是正確的方法來做到這一點,或者甚至建議這樣做? 如果我需要在我的腳本中使用modernizr,它會再次加載,如果我不知道,它是未定義的。

在此先感謝。 :)

回答

9

如果Modernizr的是在頭部加載的第一個劇本,那麼它是來自世界各地的訪問,這樣你就可以這樣定義簡單的包裝:

define('modernizr', function() { return window.Modernizr }); 

該代碼可以放在裏面wrappers.js這樣的:

<head> 
<script src="/js/vendor/modernizr.js"></script> 
<script src="/js/vendor/require.js"></script> 
<script src="/js/wrappers.js"></script> 
<script src="/js/main.js"></script> 
</head> 

然後在main.js

var scripts = document.getElementsByTagName('script') 
    , src = scripts[scripts.length - 1].src 
    , baseUrl = src.substring(src.indexOf(document.location.pathname), src.lastIndexOf('/')) 

require.config({ 
    baseUrl: baseUrl 
}) 
+0

你會在定義這個您需要的只是後配置d eclaration?或者你會有一個像wrappers.js文件的東西,並有很多這些小定義?每當你想從窗口對象返回一些東西時,我都可以在這裏看到一個用法。特別是對於測試,你可以很容易地模擬出全局對象 – Neil 2013-07-10 16:28:44

+0

對於op問題,我會在需要配置在require_j自動加載的'data-main'屬性中指定的main.js中之後立即放置它。但是如果你需要把它放在單獨的文件中,那麼這些腳本應該按正確的順序加載,而main.js應該定義baseUrl。 – 2013-07-10 17:51:21

+0

將其包含在main.js中,它的作用就像魅力:) – shapeshifta 2013-07-30 12:34:27