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(代码片段类似于脚本,但执行于 另一个全局上下文)