3

私はこの問題を完全には理解していないと確信していますが、プロジェクトの IE9 で奇妙な動作が見られるようdocument.writeです。

document.write('<scr'+'ipt type="text/javascript" src="'+file1+'"></src'+'ipt>');
document.write('<scr'+'ipt type="text/javascript" src="'+file2+'"></src'+'ipt>');
document.write('<scr'+'ipt type="text/javascript" src="'+file3+'"></src'+'ipt>');

私の限られた Google の調査によると、IE9 はこの方法で挿入されたスクリプトを他のブラウザー (特に Firefox と Chrome) とは異なる順序で実行します。すべてのブラウザで同じ実行順序を保証する、ここで目指していることを達成するためのより良い方法はありますか?

私はそれを取り戻します。私たちはすべてのブラウザを気にしているわけではなく、Chrome と IE9 だけを気にしています。

4

4 に答える 4

5

あるもののonloadイベントをチェーンして、別のイベントのロードを開始できると思います。

var newJS= document.createElement('script');
newJS.onload=function() {alert("done")} //or call next load function
newJS.src="..."
document.body.appendChild(newJS)
于 2011-08-19T19:20:20.550 に答える
5

スクリプト ローダー (私が書いたもの: LABjs など) を使用します。これにより、さまざまなブラウザー間での読み込みのさまざまな癖がすべて正規化されます。おまけに、あのひどい document.write() は使用しません。LABjs を使用すると、すべてのスクリプトを非同期 (並列) にロードできますが、それらが適切な順序で実行されることを確認してください。基本的にまさにあなたが望むもののように聞こえます。

于 2011-08-22T21:08:48.110 に答える
2

したがって、この方法でスクリプトタグを作成する利点は、非同期で読み込まれることです。これがどのように行われるかについてのブラウザのニュアンスについてはわかりませんが、ダウンロード時に特定の順序で実行されるとは思っていました。HTML5async属性の動作に似ています。

別のHTML5属性deferがあり、代わりにスクリプトを順番に実行しますが、ブロックしない方法で実行します。生成された<script>タグにそれを追加してみることができます。IE9は部分的にそれを尊重します。

于 2011-08-19T19:19:16.660 に答える
0

まさにこの目的のために、小さなスクリプトを作成しました。

https://github.com/mudroljub/js-async-loader

つまり、すべてのスクリプトを非同期的にロードし、その結果として実行します。次のようになります。

for (var lib in libs) {
    loadAsync(lib);
}

そして、あなたは必要ありませんdocument.write();

于 2015-11-27T10:26:45.763 に答える