7

このコード サンプルは、特定の無名のベンダーのドキュメントで見られます。スクリプトを非同期的にロードし、その後関数を呼び出すように見えます。if-undefined チェックが明らかなエラーを防ぐことはわかっていますが、これは完全に間違っているわけではありませんか?

IE8/9 では正しく動作すると思いますが、LOADER_URL スクリプトが読み込まれて実行されるまで実行がブロックされます。そして、非同期属性をサポートしている他の多くのブラウザを信じています。これにより、インラインブロックがifブロック内のコードを実行するのはごく一部になります。ドキュメントには、「タグは非同期であり、ページの読み込みが遅くなることはありません」と記載されています。

<script type="text/javascript" src="LOADER_URL" async="true"></script>
<script type="text/javascript">
if (typeof (OBJECT_DEFINED_IN_LOADER_URL) != "undefined") { OBJECT_DEFINED_IN_LOADER_URL.Load(false); }
</script>

ドキュメントの以前のバージョンを見ると、非同期属性の提案がなく、この主張もしていませんでした。一部のテクニカル ライターは、すべてのブラウザーで適切にテストせずに、「はい、それで動作します」と言い間違えたのでしょうか? IE <= 9 では、常に動作します。そして、非同期コードはデバッグするのがとても楽しいので...多分それは彼らのために働いた...

それは私の疑いです:)

4

5 に答える 5

1

hereで説明されているように、HTML5 の新機能です: async 属性は、その値として 'async' によって割り当てられます。非同期で実行されるスクリプトを指定します (外部スクリプトのみ)。

外部スクリプトを呼び出すために、ブラウザでこのコードを使用して、これまでのところ問題は見つかりませんでした。

function include(src, attr, value)
{
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.setAttribute(attr, value);
    script.async = 'async';
    script.src = src;
    head.appendChild(script);
}

include('LOADER_URL', 'custom-attr', 'custom-value');
于 2016-02-12T19:15:20.030 に答える
0

これが意味をなすかどうかは、コードの構造に大きく依存します。

ブラウザが特定のファイルをキャッシュすることに注意する必要があります (これにはスクリプトが含まれます)。あなたのスクリプトは、必要なリソースをオンデマンドでロードするライブラリのようなもの (おそらくrequire.jsのようなもの) であるように思われるため、この非同期コードは、ブラウザがキャッシュにすべてを持っている場合 (= オブジェクトが既に存在する場合) に完全に理にかなっている可能性があります。読み込みプロセスを中断するだけです。

于 2013-05-08T09:31:19.677 に答える