L'élément HTML <script> est utilisé pour intégrer ou faire référence à un script exécutable.

Les scripts sans attribut async ou defer sont chargés et exécutés immédiatement avant que le navigateur continue l'analyse de la page.

Catégories de contenu Contenu de flux, contenu phrasé, contenu de méta-données.
Contenu autorisé Script dynamique tel que text/javascript.
Omission de balises Aucune, la balise d'ouverture et la balise de fermeture sont obligatoires
Parents autorisés Tout élément acceptant du contenu de méta-données ou tout élément acceptant du contenu phrasé.
Rôles ARIA autorisés Aucun.
Interface DOM HTMLScriptElement

Attributs

Cet élément inclut les attributs universels.

async HTML5
Cet attribut booléen indique si le navigateur doit, dans la mesure du possible, exécuter les scripts de manière asynchrone. Cet attribut ne doit pas être utilisé si l'attribut src est absent (c'est-à-dire pour les scripts « inline » déclarés dans les éléments), dans ce cas il n'aurait aucun effet.
Les scripts insérés dynamiquement sont exécutés de façon asynchrone par défaut. Pour activer le mode d'exécution synchrone, il faudra explicitement indiquer async=false.

Se référer au tableau de compatibilité ci-après pour les informations concernant la prise en charge par les navigateurs. Voir aussi la page sur les scripts asynchrones avec asm.js.
crossorigin
Les balises de script classiques enverront un minimum d'informations à window.onerror pour les scripts qui ne respectent pas les contrôles standard du CORS. Afin de disposer de plus de renseignements sur les erreurs pour les sites utilisant des domaines séparés pour des documents statiques, on pourra utiliser cet attribut. Voir la page de réglages des attributs CORS pour plus d'explications quant aux valeurs valides.
defer
Cet attribut booléen permet d'indiquer au navigateur que le script doit être exécuté après l'analyse du document et avant l'évènement DOMContentLoaded. Cet attribut ne doit pas être utilisé si l'attribut src est absent (c'est-à-dire pour les scripts contenus déclarés dans les éléments), dans ce cas il n'aurait aucun effet. Pour obtenir un effet similaire avec les scripts insérés de façon dynamique, on utilisera explicitement async=false. Les scripts qui possèdent un attribut defer seront exécutés dans l'ordre dans lequel ils apparaissent dans le document.
integrity
Cet attribut contient des métadonnées que l'agent utilisateur peut vérifier afin de contrôler qu'une ressource téléchargée n'a pas été modifiée de façon frauduleuse. Pour plus d'informations, consulter la page relative à l'intégrité des sous-ressources.
nomodule
Cet attribut booléen indique que le script ne doit pas être exécuté dans le navigateur si celui prend en charge les modules ES6. En pratique, de tels scripts seront utilisés pour couvrir les cas où le navigateur ne prend pas en charge les modules JavaScript.
nonce
Un nonce cryptographique utilisé pour inscrire les scripts en ligne sur une liste blanche pour la règle script-src de la CSP (Content Security Policy). Le serveur doit générer un nonce unique chaque fois qu'il transmet une règle de sécurité. Ce nonce ne doit pas pouvoir être deviné car sinon, il devient trivial d'outrepasser la règle de sécurité.
src
Cet attribut définit l'URI d'un script externe. Cela peut être utilisé pour insérer des scripts autrement qu'en les insérant à même le document. Les éléments script avec un attribut src défini ne doivent pas avoir de script compris dans leurs balises.
type
Cet attribut définit le langage de script utilisé par le script contenu dans l'élément ou référencé via l'attribut src. La valeur de cet attribut est un type MIME. Des exemples de types MIME pris en charge sont text/javascript, text/ecmascript, application/javascript et application/ecmascript. Si cet attribut est absent, le script est interprété comme du JavaScript.
Si le type MIME indiqué n'est pas un type correspondant à JavaScript, le contenu de l'élément sera considéré comme un bloc de données et ne sera pas traité par le navigateur. L'attribut src est alors ignoré.
Si le type indiqué est module, le code est traité comme un module JavaScript . Pour plus de détails, lire ES6 en détails : les modules.
text
Like the textContent attribute, this attribute sets the text content of the element.  Unlike the textContent attribute, however, this attribute is evaluated as executable code after the node is inserted into the DOM.

Attributs dépréciés

language
Comme l'attribut type, cet attribut spécifie le langage de script utilisé. Cependant, contrairement à l'attribut type les valeurs possibles de cet attribut n'ont jamais été normalisées. Il est recommandé d'utiliser l'attribut type plutôt que celui-là.

Notes

Le script doit être servi avec le type MIME text/javascript. Cependant, les navigateurs appliquent cette règle avec une certaine flexibilité et ne bloquent que si le script est servi avec un type image (image/*), vidéo (video/*) ou audio (audio/*) ou CSV (text/csv). Si le script est bloqué, un évènement error sera déclenché sur l'élément, sinon, l'évènement load sera envoyé.

Exemples

<!-- HTML4 et (x)HTML -->
<script type="text/javascript" src="javascript.js"></script>

<!-- HTML5 -->
<script src="javascript.js"></script>

Spécifications

Spécification État Commentaires
HTML Living Standard
La définition de '<script>' dans cette spécification.
Standard évolutif Ajout du type module. Ajout de l'attribut nonce.
HTML5
La définition de '<script>' dans cette spécification.
Recommendation  
HTML 4.01 Specification
La définition de '<script>' dans cette spécification.
Recommendation  
Subresource Integrity
La définition de '<script>' dans cette spécification.
Recommendation Ajout de l'attribut integrity.

Compatibilité des navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple1 Oui11 Oui Oui Oui
async1 Oui1 Oui Oui Oui
crossorigin30 Oui13 Non12 Oui2
defer Oui Oui3.53104 Non Oui
integrity45 Non43 Non ? Non5
language1 Oui1 Oui Oui Oui
nomodule Oui Non Oui6 Non Non Non
src1 Oui1 Oui Oui Oui
text1 Oui1 Oui Oui Oui
type1 Oui1 Oui Oui Oui
type.module6116 Non Non4810.1
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Support simple Oui Oui Oui4 Oui Oui Oui
async Oui Oui Oui4 Oui Oui Oui
crossorigin Oui Oui ?14 Non ? ?
defer Oui Oui Oui4 Non ? Oui
integrity4545 Non43 Non ? Non
language Oui Oui Oui4 Oui Oui Oui
nomodule Oui Oui Non Oui6 Non ? Non
src Oui Oui Oui4 Oui Oui Oui
text Oui Oui Oui4 Oui Oui Oui
type Oui Oui Oui4 Oui Oui Oui
type.module616116 Non Non4810.3

1. Starting in Firefox 4, inserting <script> elements that have been created by calling document.createElement("script") no longer enforces execution in insertion order. This change lets Firefox properly abide by the specification. To make script-inserted external scripts execute in their insertion order, set .async=false on them.

2. The crossorigin attribute was implemented in WebKit in WebKit bug 81438.

3. Since Firefox 3.6, the defer attribute is ignored on scripts that don't have the src attribute. However, in Firefox 3.5 even inline scripts are deferred if the defer attribute is set.

4. In versions prior to Internet Explorer 10, it implemented >script< by a proprietary specification. Since version 10 it conforms to the W3C specification.

5. WebKit bug 148363 tracks WebKit implementation of Subresource Integrity (which includes the integrity attribute).

6. This feature is behind the dom.moduleScripts.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.

Notes de compatibilité

Pour les anciens navigateurs qui ne prennent pas en charge l'attribut async attribute, les scripts insérés lors de l'analyse (parsing) bloquent l'analyseur, les scripts insérés par d'autres scripts s'exécutent en asynchrone sous IE et WebKit et en synchrone sous Opera et sous Firefox pour les versions antérieures à Firefox 4.0. Sous Firefox 4.0, la propriété async du DOM vaut true par défaut pour les scripts créés par des scripts afin que le comportement par défaut corresponde au comportement d'IE et de WebKit. Afin que les scripts insérés par des scripts externes soient lancés dans l'ordre d'insertion, on définira .async=false pour les scripts dont on souhaite conserver l'ordre d'exécution. document.write() ne doit jamais être appelé sur un script asynchrone avec async. Sous Gecko 1.9.2, si on appelle document.write(), cela aura un effet imprévisible. Pour Gecko 2.0, appeler document.write() depuis un script asynchrone n'aura aucun effet (en dehors d'afficher un message d'erreur dans la console).

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight, madarche, opii93, tregagnon, Goofy
 Dernière mise à jour par : SphinxKnight,