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/javascriptMIME 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.
The async and defer attributes are boolean attributes that control how the script should be executed. The defer and async attributes must not be specified if the src attribute is absent.
There are three possible execution modes:
If the async attribute is present, then the script will be executed asynchronously as soon as it downloads.
If the async attribute is absent but the defer attribute 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 defer attribute may be specified with the async attribute, so legacy browsers that only support defer (and not async) fall back to the defer behavior 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 the document.write() method; the handling of scripting; and so on.
A string that joins and returns the contents of all Text nodes inside the <script> element (ignoring other nodes like comments) in tree order. On setting, it acts the same way as the textContent IDL attribute.
Note: When inserted using the document.write() method, <script> elements execute (typically synchronously), but when inserted using innerHTML or outerHTML, they do not execute at all.
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: high to fetch at a high priority, low to fetch at a low priority, or auto to indicate no preference (which is the default).
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.
Returns true if the browser supports scripts of the specified type and false otherwise. This method provides a simple and unified method for script-related feature detection.
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 document.currentScript). These scripts will be asynchronously executed. For more details, see the defer and async properties.
This next function, instead of prepending the new scripts immediately before the document.currentScript element, appends them as children of the <head> tag.