Résumé
L'élément HTML <script>
est utilisé pour intégrer ou faire référence à un script exécutable au sein d'un document HTML ou XHTML.
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
- Éléments parents autorisés Tout élément acceptant du contenu de méta-données ou tout élément acceptant du contenu phrasé.
- Interface DOM
HTMLScriptElement
Attributs
Cet élément inclue les attributs globaux.
async
HTML5- Définissez cet attribut booléen afin d'indiquer si le navigateur doit, dans la mesure du possible, exécuter les scripts de manière asynchrone. Cela n'a pas d'effet sur les scripts n'ayant pas d'attribut
src
. Dans les navigateurs plus anciens ne supportant pas l'attributasync
, les scripts insérés par d'autres scripts bloquent le parseur. Dans ces navigateurs-là, Internet Explorer et Webkit exécutent ces scripts insérés par d'autres scripts de manière asynchrone alors que les versions d'Opera et celles de Firefox (avant la version 4.0) les exécutaient de manière synchrone. Dans Firefox 4.0, la valeur par défaut de la propriété DOMasync
esttrue
pour les scripts générés par des scripts, son comportement par défaut correspondant alors avec celui de IE et WebKit. - Afin que les scripts insérés via des scripts externes s'exécutent dans l'ordre de leur insertion dans les navigateurs où la valeur de
document.createElement("script").async
esttrue
(comme Firefox 4.0), passez la valeur.async=false
aux scripts dont vous souhaitez conserver l'ordre. N'appelez jamais la méthodedocument.write()
depuis un scriptasync
. Dans Gecko 1.9.2, appeler cette méthode depuis un tel script a un effet imprévisible. Dans Gecko 2.0, appeler cette méthode depuis un tel script n'a pas d'effet (en dehors d'afficher un message d'avertissement dans la console). 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 attributsrc
défini ne doivent pas avoir de script compris dans leurs balises. type
- Cet attribut définit le langage de script utilisé par un script au sein d'un élément
script
ou dont la référence est faite via l'attributsrc
. Ceci est défini comme un type MIME. Des exemples de types MIME supportés sonttext/javascript
,text/ecmascript
,application/javascript
etapplication/ecmascript
. Si cet attribut est absent, le script est interprété comme étant en JavaScript. language
- Comme l'attribut
type
, cet attribut spécifie le langage de script utilisé. Cependant, contrairement à l'attributtype
les valeurs possibles de cet attribut n'ont jamais été normalisées. Il est recommandé d'utiliser l'attributtype
plutôt que celui-là. defer
- Cet attribut booléen permet d'indiquer au navigateur si le script doit être exécuté après l'analyse du document. Étant donné que cette fonctionnalité n'a pas été implémentée par les principaux navigateurs en dehors de Firefox, les utilisateurs ne devraient pas avoir de certitude quant au fait que l'exécution du script soit vraiment reportée. Il ne faut jamais appeler la méthode
document.write()
depuis un script dont l'exécution est reportée de cette manière (depuis Gecko 1.9.2, cela détruira le document). Cet attribut ne doit pas être utilisé pour des scripts n'ayant pas l'attributsrc
. Depuis Gecko 1.9.2, l'attributdefer
est ignoré sur les scripts sans attributsrc
. Cependant, avec Gecko 1.9.1 même les scripts en page sont exécutés de manière tardive si leur attributdefer
est àtrue
. crossorigin
- Les balises de
script
classiques enverront un minimum d'informations àwindow.onerror
en ce ce qui concernent les scripts ne respectant 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, plusieurs navigateurs utilisent l'attributcrossorigin
pour les scripts en utilisant la même définition que pour l'attributcrossorigin
pour les images. Les efforts pour la standardisation de cet attribut sont en cours sur la liste de distribution du WHATWG.
Exemples
<!-- HTML4 et (x)HTML --> <script type="text/javascript" src="javascript.js"> <!-- HTML5 --> <script src="javascript.js"></script>
Spécifications
Spécification | Statut | Commentaires |
---|---|---|
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 |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | 1.0 | 1.0 (1.7 ou moins) | (Oui) | (Oui) | (Oui) |
Attribut async |
(Oui) | 3.6 (1.9.2) | 10 | Pas de support | (Oui) |
Attribut defer |
(Oui) | 3.5 (1.9.1) |
4 (follows a spec of its own) 10 (by the spec) |
Pas de support | (Oui) |
Attribut crossorigin |
WebKit bug 81438 | 13 (13) bug 696301 | Pas de support | 12.50 | WebKit bug 81438 |
Fonctionnalité | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Support simple | (Oui) | 1.0 (1.0) | (Oui) | (Oui) | (Oui) |
Attribut async |
(Oui) | 1.0 (1.0) | Pas de support | ? | (Oui) |
Attribut defer |
(Oui) | 1.0 (1.0) | Pas de support | ? | (Oui) |
Support de l'attribut async
Les navigateurs plus anciens ne supportent pas l'attribut async attribute, les scripts insérés par le parseur bloquent le parseur, les scripts insérés par les script s'exécutent de façon asyncrhone dans IE et WebKit mais de façon synchrone dans Opera et dans les versions de Firefox inférieures à Firefox 4.0. Dans Firefox 4.0, la propriété DOM async
a true
comme valeur par défaut pour les scripts créés par les scripts et le comportement par défaut rejoint celui de IE et WebKit. Afin qu'un script inséré par un script externe soit exécuté dans l'ordre d'insertion dans les navigateurs où document.createElement("script").async
vaut true
(comme Firefox 4.0), il faut mettre .async=false
dans les scripts pour lesquels on veut conserver l'ordre. Il ne faut jamais appeler document.write()
depuis un script asynchrone. Dans Gecko 1.9.2, l'appel de document.write()
entraînait un résultat imprévisible. Avec Gecko 2.0, l'appel de document.write()
depuis un script asynchrone n'a aucun effet (à part un avertissement affiché dans les erreurs de la console).
Notes spécifiques à Gecko
À partir de Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1), insérer des éléments de script ayant été créés via l'appel de document.createElement("script") dans le DOM n'implique pas que l'ordre de l'exécution suive celui des insertions. Ce changement permet à Gecko de mieux se conformer à la spécification HTML5. Afin que les scripts insérés par des scripts externes s'exécutent en suivant l'ordre de leur insertion, réglez leur attribut async
à false
.
Les éléments <script>
contenus dans des éléments <iframe>
, <noembed>
ou <noframes>
sont maintenant également exécutés pour les mêmes raisons.