2013-04-29 8 views
5

私はmodernizrを頭に同期してロードして、foucを防止したいと思います。私は/ bodyのrequire.jsを使用して、モダニザを機能の検出などに使用したい他のスクリプトをロードしています。頭にmodernizrをロードしますが、require.jsで使用してください

これを行う正しい方法は何ですか?そうすることをおすすめしますか? スクリプトにmodernizrが必要な場合は、再度読み込まれますが、そうでない場合は未定義です。

ありがとうございます。 :) Modernizrは頭の中でロードされた第一のスクリプトである場合は、このような単純なラッパーを定義することができますので、それは、どこからでもアクセス可能です

答えて

9

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

+0

opの質問については、requirejsによって自動的に読み込まれる 'data-main'属性で指定されたmain.jsのrequire configの直後に配置します。しかし、別のファイルに置く必要がある場合は、これらのスクリプトを正しい順序でロードし、main.jsでbaseUrlを定義する必要があります。 –

+0

main.jsに含まれ、それは魅力的に動作します:) – shapeshifta

関連する問題