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 application/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.
Properties
Inherits properties from its parent, HTMLElement.
HTMLScriptElement.type-
Is a
DOMStringrepresenting the MIME type of the script. It reflects thetypeattribute. HTMLScriptElement.src-
Is a
DOMStringrepresenting the URL of an external script. It reflects thesrcattribute. HTMLScriptElement.event-
Is a
DOMString; an obsolete way of registering event handlers on elements in an HTML document. HTMLScriptElement.charset-
Is a
DOMStringrepresenting the character encoding of an external script. It reflects thecharsetattribute. HTMLScriptElement.async,HTMLScriptElement.defer-
The
asyncanddeferattributes are boolean attributes that control how the script should be executed. Thedeferandasyncattributes must not be specified if thesrcattribute is absent.There are three possible execution modes:
- If the
asyncattribute is present, then the script will be executed asynchronously as soon as it downloads. - If the
asyncattribute is absent but thedeferattribute is present, then the script is executed when the page has finished parsing. - If neither attribute is present, then the script is fetched and executed immediately, blocking further parsing of the page.
The
deferattribute may be specified with theasyncattribute, so legacy browsers that only supportdefer(and notasync) fall back to thedeferbehavior instead of the default blocking behavior.Note: The exact processing details for these attributes are complex, involving many different aspects of HTML, and therefore are scattered throughout the specification. These algorithms describe the core ideas, but they rely on the parsing rules for
<script>start and end tags in HTML, in foreign content, and in XML; the rules for thedocument.write()method; the handling of scripting; and so on. - If the
HTMLScriptElement.crossOrigin-
Is a
DOMStringreflecting the CORS setting for the script element. For scripts from other origins, this controls if error information will be exposed. HTMLScriptElement.text-
Is a
DOMStringthat joins and returns the contents of allTextnodes inside the<script>element (ignoring other nodes like comments) in tree order. On setting, it acts the same way as thetextContentIDL attribute.Note: When inserted using the
document.write()method,<script>elements execute (typically synchronously), but when inserted usinginnerHTMLorouterHTML, they do not execute at all. HTMLScriptElement.fetchpriority-
An optional
DOMStringrepresenting 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). HTMLScriptElement.noModule-
Is a boolean value that if true, stops the script's execution in browsers that support ES2015 modules — used to run fallback scripts in older browsers that do not support JavaScript modules.
HTMLScriptElement.referrerPolicy-
Is a
DOMStringthat reflects thereferrerpolicyHTML attribute indicating which referrer to use when fetching the script, and fetches done by that script.
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.
Methods
No specific methods; inherits methods 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 document.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) {
var 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 document.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) {
var 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", function () { 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
| Specification |
|---|
| HTML Standard # htmlscriptelement |
Browser compatibility
BCD tables only load in the browser
See also
- HTML
<script>element - HTML
<noscript>element document.currentScript- Web Workers (code snippets similar to scripts but executed in another global context)
- Ryan Grove's <script> and <link> node event compatibility chart