2012-03-17 3 views
4

私は非常に単純なことをjavascriptで行いたい。私はmath.jsで計算メソッドを呼び出す必要があるmain.jsファイルを持っています。計算のためのjavascriptライブラリを含める

スクリプトタグ、最初のmath.js、main.jsの2つのファイルをindex.htmlに含めると、main.jsで使用する前にmath.jsが読み込まれたことが確認されますか?

もしそうでなければ、私はここでHow do I include a JavaScript file in another JavaScript file?を読んでいるような過酷なハックをする必要がありますか、それとも依存関係が実際にどのように考慮されているかをリンクで見ることさえできないためです。

アップデート:なぜDashcodeのようにすることができませんHow can I add my library to be loaded Dashcode partsつまり、document.write( '...')を使用するだけですか?ライブラリがmain.jsより大きかった場合、非常に遅い接続で十分な堅牢性を持っていますか?

+0

あなたは、ファイルは次のスクリプトファイルをロードする前に読み込みを完了することをguranteedされていません。私はちょうどこれを見つけましたが、あなたが探しているものかもしれません:http://requirejs.org/ – Smamatti

答えて

4

この変数が存在する場合、math.jsに変数を設定し、main.jsにprooveを設定します。 main.jsで

var mathLoaded = true; 

function loaded() { 
    return ((typeof mathLoaded) !== 'undefined'); 
} 

編集:それがロードされるまで

は今、あなたは、ウェイト機能を起動することができます。

function wait() { 
    if(loaded()) { 
     //doSomething(); 
    } else { 
     window.setTimeout(function() { wait(); }, 0); 
    } 
} 

window.setTimeout(function() { wait(); }, 0); 
+0

まだロードされていない場合はどうすればいいですか? – user310291

+0

私は私の答えを編集しました。今はあなたが望むように動作するはずです。 –

+0

偉大なそれを試して:)このソリューションも私のポストの更新を参照してください – user310291

1

あなたが見ることができますRequireJSに依存関係がロードされることを確認する

JSも読み込まれ、解析されます。ソースの最初のものが最初に取得され、最初に解析されます(ただし、一部のファイルのサーバーが遅くなるため、順序が保証されません)。そのため、ライブラリやツールキット(jQueryなど)を使用する場合は、他のものより先にロードすることをお勧めします。

+0

RequireJSは良い解決策と思われます。私が他の選択肢を持たないと思うより軽い他の解決策がないならば。 – user310291

1

あなたはいません。ファイルは任意の順序でロードできます。通常、文書loadイベントから初期コードを呼び出す必要があります。それは、ページに必要なすべてのファイルがロードされた後でも起動されます。

+0

本当ですか?その場合、jQueryプラグインを正しくロードする方法が不思議です。 jQueryコアの後にロードする必要があるためです。 – pimvdb

1

window.onloadを使用しないのはなぜですか?

window.onload = function() { 
    //your code here. 
} 

やクロスブラウザaddEvent機能を本当に空想のですか?適切なイベントに関数をアタッチ

var libJS = { 
    addEvent: function (obj, type, fn) { 
     if (obj.addEventListener) { 
      obj.addEventListener(type, fn, false); 
      return true; 
     } else if (obj.attachEvent) { 
      obj['e' + type + fn] = fn; 
      obj[type + fn] = function() { 
       obj['e' + type + fn](window.event); 
      } 
      var r = obj.attachEvent('on' + type, obj[type + fn]); 
      return r; 
     } else { 
      obj['on' + type] = fn; 
      return true; 
     } 
    } 
} 

...

libJS.addEvent(window, 'load', someMainJsFunction); //add to window.onload