HTMLScriptElement
Baseline 廣泛可用 *
HTML <script> 元素公開了 HTMLScriptElement 介面,該介面提供了用於操作 <script> 元素行為和執行的特殊屬性和方法(超越了繼承的 HTMLElement 介面)。
JavaScript 檔案應使用 text/javascript MIME 型別提供服務,但瀏覽器很寬容,僅當指令碼以影像型別 (image/*)、影片型別 (video/*)、音訊型別 (audio/*) 或 text/csv 提供服務時才會阻止。如果指令碼被阻止,其元素將接收一個 error 事件;否則,它將接收一個 load 事件。
例項屬性
繼承自其父級 HTMLElement 的屬性。
HTMLScriptElement.attributionSrc安全上下文 實驗性的-
以程式設計方式獲取和設定
<script>元素上的attributionsrc屬性,反映該屬性的值。attributionsrc指定您希望瀏覽器隨指令碼資源請求一起傳送Attribution-Reporting-Eligible標頭。在伺服器端,這用於觸發在響應中傳送Attribution-Reporting-Register-Source或Attribution-Reporting-Register-Trigger標頭,以分別註冊基於 JavaScript 的 歸因源或 歸因觸發器。 HTMLScriptElement.async-
一個布林值,用於控制指令碼的執行方式。對於經典指令碼,如果
async屬性設定為true,則外部指令碼將在解析的同時並行獲取,並在可用時立即進行評估。對於 模組指令碼,如果async屬性設定為true,則指令碼及其所有依賴項將在解析的同時並行獲取,並在可用時立即進行評估。 HTMLScriptElement.blocking-
一個字串,指示在獲取指令碼時應阻止某些操作。它反映了
<script>元素的blocking屬性。 HTMLScriptElement.charset已棄用-
一個字串,表示外部指令碼的字元編碼。它反映了
charset屬性。 HTMLScriptElement.crossOriginHTMLScriptElement.defer-
一個布林值,用於控制指令碼的執行方式。對於經典指令碼,如果
defer屬性設定為true,則外部指令碼將在文件解析完畢後、但在觸發DOMContentLoaded事件之前執行。對於 模組指令碼,defer屬性無效。 HTMLScriptElement.event已棄用-
一個字串;一種過時的在 HTML 文件中的元素上註冊事件處理程式的方式。
HTMLScriptElement.fetchPriority-
一個可選字串,表示一個給瀏覽器的提示,說明應如何優先獲取外部指令碼相對於其他外部指令碼。如果提供了此值,則它必須是允許的可能值之一:
high表示高優先順序獲取,low表示低優先順序獲取,或auto表示沒有偏好(這是預設值)。它反映了<script>元素的fetchpriority屬性。 HTMLScriptElement.integrity-
一個字串,包含內聯元資料,瀏覽器可以使用這些元資料來驗證獲取的資源是否未被意外篡改。它反映了
<script>元素的integrity屬性。 HTMLScriptElement.noModule-
一個布林值,如果為 true,則會停止指令碼在支援 ES 模組的瀏覽器中的執行——用於在不支援 JavaScript 模組的舊瀏覽器中執行備用指令碼。
HTMLScriptElement.referrerPolicy-
一個字串,反映了
referrerPolicyHTML 屬性,該屬性指示在獲取指令碼以及由該指令碼執行的獲取時應使用哪個引用者。 HTMLScriptElement.src-
一個字串,表示外部指令碼的 URL;這可以作為直接在文件中嵌入指令碼的替代方法。它反映了
<script>元素的src屬性。 HTMLScriptElement.text-
一個字串,將
<script>元素內的所有Text節點的(忽略其他節點,如註釋)內容按樹順序連線並返回。在設定時,它的作用與Node.textContent屬性相同。注意: 當使用
Document.write()方法插入時,<script>元素會執行(通常是同步執行),但當使用Element.innerHTML或Element.outerHTML插入時,它們根本不會執行。 HTMLScriptElement.type-
一個字串,表示指令碼的型別。它反映了
<script>元素的type屬性。
靜態方法
HTMLScriptElement.supports()-
如果瀏覽器支援指定型別的指令碼,則返回
true,否則返回false。此方法提供了一種簡單統一的指令碼相關功能檢測方法。
例項方法
沒有特定方法;從其父級 HTMLElement 繼承方法。
事件
沒有特定事件;從其父級 HTMLElement 繼承事件。
示例
動態匯入指令碼
讓我們建立一個函式,該函式在文件中匯入新指令碼,建立一個 <script> 節點,該節點位於承載以下程式碼的 <script> 元素正前面(透過 document.currentScript)。這些指令碼將是非同步執行的。有關更多詳細資訊,請參閱 defer 和 async 屬性。
function loadError(oError) {
throw new URIError(`The script ${oError.target.src} didn't load correctly.`);
}
function prefixScript(url, onloadFunction) {
const newScript = document.createElement("script");
newScript.onerror = loadError;
if (onloadFunction) {
newScript.onload = onloadFunction;
}
document.currentScript.parentNode.insertBefore(
newScript,
document.currentScript,
);
newScript.src = url;
}
下一個函式不是將新指令碼新增到 document.currentScript 元素前面,而是將它們作為 <head> 標籤的子元素附加。
function loadError(oError) {
throw new URIError(`The script ${oError.target.src} didn't load correctly.`);
}
function affixScriptToHead(url, onloadFunction) {
const newScript = document.createElement("script");
newScript.onerror = loadError;
if (onloadFunction) {
newScript.onload = onloadFunction;
}
document.head.appendChild(newScript);
newScript.src = url;
}
使用示例
affixScriptToHead("myScript1.js");
affixScriptToHead("myScript2.js", () => {
alert('The script "myScript2.js" has been correctly loaded.');
});
檢查指令碼型別是否受支援
HTMLScriptElement.supports() 提供了一種統一的機制來檢查瀏覽器是否支援特定型別的指令碼。
下面的示例展示瞭如何透過檢查 noModule 屬性的存在作為備用方案來檢查模組支援。
function checkModuleSupport() {
if ("supports" in HTMLScriptElement) {
return HTMLScriptElement.supports("module");
}
return "noModule" in document.createElement("script");
}
經典指令碼被假定在所有瀏覽器中都受支援。
規範
| 規範 |
|---|
| HTML # htmlscriptelement |
瀏覽器相容性
載入中…
另見
- HTML
<script>元素 - HTML
<noscript>元素 document.currentScript- Web Workers(程式碼片段類似於指令碼,但執行於 另一個全域性上下文)