1

これは私が持っているものです:

<script src="myscript.js" type="text/javascript"></script>
<script type="text/javascript">testfunction("hello");</script>

myscript.jsの内部:

if(!window.jQuery)
{
  var script = document.createElement('script');
  script.type = "text/javascript";
  script.src = 'jquery-1.9.0.min.js';
  document.getElementsByTagName('head')[0].appendChild(script);
}

function testfunction(str) {
    $(document).ready(function () {
      alert(str);
    });
}

もちろん、現在のテスト関数にはjQueryは必要ありませんが、必要になります。このアプローチを使用すると、jQueryはダウンロードされますが、testfunction()を呼び出すときにブラウザーにロードされません(Uncaught ReferenceError:$は定義されていません)。

私にできることは、JSがロードされる前に別のスクリプトでjQueryをロードすることです。その場合は機能しますが、3つの異なるスクリプトがあり、正直なところ、それはエレガントではないようです。

これを達成する他の方法はありますか?

ありがとう!

4

2 に答える 2

3

この回答を見てみるとよいでしょう。jQuery が完全に読み込まれるまで待機していない可能性があります。

于 2013-03-05T17:25:41.990 に答える
0

あなたのコードでは、スクリプトは非同期的にロードされます。jQuery に依存する部分をトリガーする onload イベントを script タグに追加する必要があります。

スクリプトを同期的にロードする場合は、次を使用しますdocument.write

window.jQuery||document.write(unescape("%3Cscript src='"+jQueryURL+"' type='text/javascript'%3E%3C/script%3E"));

このdocument.write手法は非常に一般的ですが、ドキュメントが読み込まれた後は使用できないことに注意してください (そうしないと、ページ全体が上書きされます)。

大規模な動的読み込みを使用する場合は、既存のローダーまたは AMD ライブラリを参照してください。

于 2013-03-05T17:46:03.963 に答える