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.crossOrigin
HTMLScriptElement.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
-
一个字符串,反映了
referrerPolicy
HTML 属性,该属性指示在获取脚本以及由该脚本执行的获取时应使用哪个引用者。 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(代码片段类似于脚本,但执行于 另一个全局上下文)