script
スクリプトが実行されたときのドキュメントの最後の要素*** が現在実行中のスクリプトであると想定しても安全ですか?
たとえば、ページの本文のどこにでもドロップでき、要素を同じ場所に表示できるスクリプトを作成したいと考えています。私はこのようなことをしています:
function getCurrentScriptElement() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
}
var script = getCurrentScriptElement();
var view = document.createElement('span');
/* Put stuff in our view... */
script.parentNode.insertBefore(view, script);
スクリプトがドキュメントの本文にあると仮定すると、これは「安全」ですか? getCurrentScriptElement
関数は常に実行中のスクリプトを返しますか? そうでない場合、どうすればそれを行うことができますか?
スクリプトを特定の id 属性などに結び付けずにこれを行いたいのですが、位置的にしたいだけです。
このスクリプトを取り込む例をここに作成しました。1 つの回答は、他のスクリプトが、このような例が壊れる状況を作り出す可能性があることを示唆していました。この例を壊す他のスクリプトをこの例に追加することは可能ですか?
defer
またはasync
属性を持つ他のスクリプトがこれを破る可能性があることが示唆されました。そのようなスクリプトがどのように機能するかの例を誰か挙げることができますか?
私が理解しているように、defer
最初にDOMをロードしてから、defer
タグを使用してスクリプトを実行することを意味します。defer
別のスクリプト要素に表示される属性は、 の動作にどのように影響しgetCurrentScriptElement
ますか?
async
、私が理解しているように、そのスクリプトのフェッチを開始し、同時にDOMの解析を続けることを意味します.待つ必要はありません...しかし、スクリプトにヒットすると、停止して待機する必要がありますよね?
どちらかがどのように影響するかわかりません。誰か例を挙げてもらえますか?
* この質問では、外部スクリプトのみに関心があります。
**script
ドキュメント全体の最後の要素ではなく、script
実行時のドキュメントの最後の要素。ドキュメントの残りの部分はまだロードされていないはずですよね?