0

私は次のコードレイアウトを持っています

<script src="http://some.javascript/file.js"></script> // This should load first
<script language="JavaScript">
    document.write('<SCR'+'IPT language="JavaScript1.1" SRC="http://a.link.to.an.external.url/that/returns/a/full/html/page/including/some/javascript">'); // This should load second
    document.write('</SCR'+'IPT>');
</script>

MyJavascriptFunctionThatDependsOnStuffLoadedFromThe.documentWritePage(); <!-- Those files above should have loaded before this call -->

私はそれが奇妙に見えることを知っています。JSのロード方法に影響を与えない理由で、そのように見える必要があると仮定しましょうこれはブラウザ間で機能する必要はありません。WebKitブラウザだけです。

次のドキュメントの前に、これらの各ドキュメントが完全に読み込まれるようにするにはどうすればよいですか?つまり、最後の関数呼び出しが適切な状態を想定できるように、これらのドキュメントが同期的に読み込まれるようにするにはどうすればよいですか?

4

2 に答える 2

1

JavaScriptファイルは順番にロードしてブロックする必要があるため、依存しているスクリプトが異常なことをしている場合を除いて、他のファイルの後にapplication.jsをロードするだけです。

クロスドメインスクリプトはサイト自体のスクリプトの後にロードされるため、エラーが発生します。

次のように、イベントリスナーを追加して、このイベントにjsファイルをロードできます。

function addJavaScript( js, onload ) {
   var head, ref;
   head = document.getElementsByTagName('head')[0];
   if (!head) { return; }
   script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = js;
   script.addEventListener( "load", onload, false );
   head.appendChild(script);
}
于 2012-07-16T17:51:58.123 に答える
0

クロスブラウザーで一貫してこれを行うことはできないと思います。

IE (少なくとも多くの古いバージョン) は、サーバーから返された順序でスクリプト タグを処理します。他の多くのブラウザーは、定義されている順序でそれらを処理します。このように DOM に動的に追加されるものは誰にもわかりません。次のラッパーを追加しようとする前に、何らかのラッパーを追加して、そのラッパーが適切に配置されていることをテストしない限り、実行の順序を制御できるとは期待していません。

単にこのようにしなければならない場合、何を提案すればよいか本当にわかりません。ただし、切り替えて使用できる場合は、モジュールローダーがたくさんあります。特にAMDを見るかもしれません

于 2012-07-16T17:56:26.297 に答える