web api interface
HTMLScriptElement
HTML <script> elements expose the HTMLScriptElement interface, which provides special properties and methods for manipulating the behavior and execution of <script> elements (beyond the inherited HTMLElement interface).
JavaScript files should be served with the text/javascript MIME type, but browsers are lenient and block them only if the script is served with an image type (image/*), video type (video/*), audio type (audio/*), or text/csv. If the script is blocked, its element receives an error event; otherwise, it receives a load event.
[!NOTE] When inserted using the
write()method,<script>elements execute (typically synchronously), but when inserted usinginnerHTMLorouterHTML, they do not execute at all.
Instance properties
Inherits properties from its parent, HTMLElement.
attributionSrcDeprecated- : Gets and sets the
attributionsrcattribute on a<script>element programmatically, reflecting the value of that attribute.attributionsrcspecifies that you want the browser to send anAttribution-Reporting-Eligibleheader along with the script resource request. On the server-side this is used to trigger sending anAttribution-Reporting-Register-SourceorAttribution-Reporting-Register-Triggerheader in the response, to register a JavaScript-based attribution source or attribution trigger, respectively.
- : Gets and sets the
async- : A boolean value that controls how the script should be executed. For classic scripts, if the
asyncproperty is set totrue, the external script will be fetched in parallel to parsing and evaluated as soon as it is available. For module scripts, if theasyncproperty is set totrue, the script and all their dependencies will be fetched in parallel to parsing and evaluated as soon as they are available.
- : A boolean value that controls how the script should be executed. For classic scripts, if the
blocking- : A string indicating that certain operations should be blocked on the fetching of the script. It reflects the
blockingattribute of the<script>element.
- : A string indicating that certain operations should be blocked on the fetching of the script. It reflects the
HTMLScriptElement.charsetDeprecated- : A string representing the character encoding of an external script. It reflects the
charsetattribute.
- : A string representing the character encoding of an external script. It reflects the
crossOrigin- : A string reflecting the CORS setting for the script element. For classic scripts from other origins, this controls if error information will be exposed.
defer- : A boolean value that controls how the script should be executed. For classic scripts, if the
deferproperty is set totrue, the external script will be executed after the document has been parsed, but before firingDOMContentLoadedevent. For module scripts, thedeferproperty has no effect.
- : A boolean value that controls how the script should be executed. For classic scripts, if the
HTMLScriptElement.eventDeprecated- : A string; an obsolete way of registering event handlers on elements in an HTML document.
fetchPriority- : An optional string representing a hint given to the browser on how it should prioritize fetching of an external script relative to other external scripts. If this value is provided, it must be one of the possible permitted values:
highto fetch at a high priority,lowto fetch at a low priority, orautoto indicate no preference (which is the default). It reflects thefetchpriorityattribute of the<script>element.
- : An optional string representing a hint given to the browser on how it should prioritize fetching of an external script relative to other external scripts. If this value is provided, it must be one of the possible permitted values:
innerText- : A property that represents the inline text content of the
<script>element as though it were rendered text. The property accepts either aTrustedScriptobject or a string.
- : A property that represents the inline text content of the
integrity- : A string that contains inline metadata that a browser can use to verify that a fetched resource has been delivered without unexpected manipulation. It reflects the
integrityattribute of the<script>element.
- : A string that contains inline metadata that a browser can use to verify that a fetched resource has been delivered without unexpected manipulation. It reflects the
noModule- : A boolean value that if true, stops the script’s execution in browsers that support ES modules — used to run fallback scripts in older browsers that do not support JavaScript modules.
referrerPolicy- : A string that reflects the
referrerPolicyHTML attribute indicating which referrer to use when fetching the script, and fetches done by that script.
- : A string that reflects the
src- : A
TrustedScriptURLor string representing the URL of an external script; this can be used as an alternative to embedding a script directly within a document. It reflects thesrcattribute of the<script>element.
- : A
text- : A property that represents the inline text content of the
<script>element. The property accepts either aTrustedScriptobject or a string. It acts the same way as thetextContentproperty.
- : A property that represents the inline text content of the
textContent- : A property that represents the inline text content of the
<script>element. The property is redefined fromNodeto supportTrustedScriptas an input. On this element it behaves exactly like thetextproperty.
- : A property that represents the inline text content of the
type- : A string representing the type of the script.
It reflects the
typeattribute of the<script>element.
- : A string representing the type of the script.
It reflects the
Static methods
HTMLScriptElement.supports()- : Returns
trueif the browser supports scripts of the specified type andfalseotherwise. This method provides a simple and unified method for script-related feature detection.
- : Returns
Instance methods
No specific methods; inherits methods from its parent, HTMLElement.
Events
No specific events; inherits events from its parent, HTMLElement.
Examples
Dynamically importing scripts
Let’s create a function that imports new scripts within a document creating a <script> node immediately before the <script> that hosts the following code (through currentScript).
These scripts will be asynchronously executed.
For more details, see the defer and async properties.
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;
}
This next function, instead of prepending the new scripts immediately before the currentScript element, appends them as children of the <head> tag.
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;
}
Sample usage:
affixScriptToHead("myScript1.js");
affixScriptToHead("myScript2.js", () => {
alert('The script "myScript2.js" has been correctly loaded.');
});
Checking if a script type is supported
HTMLScriptElement.supports() provides a unified mechanism for checking whether a browser supports particular types of scripts.
The example below shows how to check for module support, using the existence of the noModule attribute as a fallback.
function checkModuleSupport() {
if ("supports" in HTMLScriptElement) {
return HTMLScriptElement.supports("module");
}
return "noModule" in document.createElement("script");
}
Classic scripts are assumed to be supported on all browsers.
Specifications
Browser compatibility
See also
- HTML
<script>element - HTML
<noscript>element currentScript- Web Workers (code snippets similar to scripts but executed in another global context)