→MS
DOMの ScriptオブジェクトはHTMLScriptElement(または HTML 4 HTMLScriptElement)インターフェイスに具現化されます。それは通常の Element オブジェクト インターフェイスに加えて(継承によって利用可能)、script 要素のレイアウトおよび表現を扱う特別なプロパティとメソッドを提供します。
親である HTMLElementからプロパティを継承しています。
注記: document.write() メソッドを用いて、script 要素を挿入した時、実行されます(典型的には同期的に)。しかし、innerHTML と outerHTML プロパティを用いて挿入した場合、結局何も実行されません。
async と defer 属性は boolean 属性です。スクリプトがどのように実行されるべきかを示します。defer および async 属性は、src 属性が無ければ指定してはならない。
これら2つの属性値を用いて選択可能な3つのモードがあります。
async 属性があれば、スクリプトは可能な限り非同期的に実行されます。
async 属性が無く defer 属性があれば、スクリプトはページのパースが完了した時点で実行されます。
両方の属性があれば、スクリプトはユーザー エージェントによるページのパース完了を待つこと無く、フェッチ後、直ちに実行されます。
注記: これらの属性の正確な処理の詳細は、大部分が歴史的な理由により、幾分複雑で HTML の様々な局面に関連しています。従って、実装の要件は、仕様の至る所に散らばっている必要性によります。
これらのアルゴリズムは、この処理のコアを記述します。ただし、これらのアルゴリズムは、HTMLの script 開始タグと終了タグの解析ルールを参照して参照します。外国のコンテンツでは、XMLでは、document.write() メソッドのルール、スクリプトの処理、等。
async属性が指定されている場合でも、defer属性を指定できます。延期のみをサポートするレガシーWebブラウザを発生させる(非同期ではありません)デフォルトの同期ブロッキング動作ではなく、延期動作にフォールバックします。
固有のメソッドはありません。親である、HTMLElement から継承しています。
function loadError (oError) { throw new URIError("The script " + oError.target.src + " is not accessible."); } function importScript (sSrc, fOnload) { var oScript = document.createElement("script"); oScript.type = "text\/javascript"; oScript.src = sSrc; oScript.onerror = loadError; if (fOnload) { oScript.onload = fOnload; } document.currentScript.parentNode.insertBefore(oScript, document.currentScript); }
同じことだがスクリプトを document.currentScript 要素の直前に加える代わりに、<head> タグの末尾の子として加えています。
var importScript = (function (oHead) { function loadError (oError) { throw new URIError("The script " + oError.target.src + " is not accessible."); } return function (sSrc, fOnload) { var oScript = document.createElement("script"); oScript.type = "text\/javascript"; oScript.src = sSrc; oScript.onerror = loadError; if (fOnload) { oScript.onload = fOnload; } oHead.appendChild(oScript); } })(document.getElementsByTagName("head")[0]);
使用法:
importScript("myScript1.js"); importScript("myScript2.js", /* onload 関数: */ function () { alert("スクリプト「myScript2.js」が正しく読み込まれているため、このアラートを読みました。"); });
表示内容: |
表示内容: |