93

deferとの両方を使用して次のJavaScriptコードをロードしたいと思いますasync

<script defer async src="/js/somescript.js"></script>

CanIUse.comdeferで確認できるように、Internet Explorer 5.5以降でサポートされているため、非同期が使用できない場合は、deferの使用に適切にフォールバックしたいと思います。非同期使用できる場合は使用する方が良いと思いますが、InternetExplorer10までサポートされていません。

したがって、私の質問は、上記のコードは有効なHTMLですか?そうでない場合は、JavaScriptを使用してこの状況を作成し、利用できないdeferときにスクリプトでの使用に適切にフォールバックすることasyncは可能ですか?

4

6 に答える 6

135

仕様から: https://www.w3.org/TR/2011/WD-html5-20110525/scripting-1.html#attr-script-async

async 属性が指定されている場合でも、defer 属性を指定すると、defer のみをサポートする (非同期をサポートしない) 従来の Web ブラウザーが、既定の同期ブロック動作ではなく、defer 動作にフォールバックするようになります。

(以下の参照リンクをチェックして、通常のスクリプトと defer および async を使用したスクリプトの違いを視覚的に表現したものを確認してください)


参考文献:

于 2012-12-11T13:15:23.117 に答える
10

はい、有効な HTML であり、期待どおりに動作します。

W3C 準拠のブラウザーはすべてasync属性を認識し、スクリプトを適切に処理しますが、従来のIEバージョンはdefer属性を認識します。

両方の属性がブール値であるため、値割り当てる必要はありません。

于 2012-12-11T13:15:04.053 に答える
1

実際、ここのほとんどのコメントには誤解があります。ASYNC と同様に、DEFER もコードを並行してロードすることを、人々は知らないようです。ただし、DOM のロード後 (ただし DOMContentLoaded の実行前) に実行を待機しますが、ASYNC はロードの直後、DOM のロード前に実行します。ASYNC と DEFER の両方がコードを並行してロードするため、両方を一緒に使用する必要はありません (ただし、おそらくレガシーに対処するため)。

于 2021-03-13T04:54:06.467 に答える