L'element <script>
(o element HTML script "Seqüència de comandaments" ) s'utilitza per inserir o fer referència a un script executable dins d'un document HTML or XHTML.
Els scripts sense atributs async
o defer
, així com els scripts en línia, es capten i s'executen immediatament, abans que el navegador segueixi analitzant la pàgina.
El script ha de ser servit amb el tipus text/javascript
MIME, però els navegadors són indulgents i només bloquejan si el script es serveix amb un tipus d'imatge (image/*
), de vídeo (video/*
), arxiu d'àudio (audio/*
), o text/csv
. Si el script és bloquejat, un error
s'envia a l'element, sinó s'envia un esdeveniment success
.
Categories de contingut | Contingut Metadata, Contingut dinàmic, Phrasing content. |
---|---|
Contingut permès | Script dinàmic com text/javascript . |
Omissió de l'etiqueta | Cap, tant l'etiqueta inicial com l’etiqueta final són obligatòries |
Elements pares permesos | Qualsevol element que accepti contingut Metadata, o qualsevol element que accepti phrasing content. |
Interfície DOM | HTMLScriptElement |
Atributs
Aquest element inclou els atributs globals.
async
HTML5- Establir aquest atribut booleà per indicar que el navegador hauria, si és possible, executar l'script de manera asincrònica. No té cap efecte sobre els scripts en línia (és a dir, scripts que no tenen l'atribut src).
- Veure Browser compatibility notes sobre el suport del navegador. Veure Async scripts per asm.js.
integrity
- Conté metadades en línia que un agent d'usuari pot utilitzar per verificar que un recurs recuperat ha estat lliurat sense manipulació inesperada. Veure Integritat de subrecursos.
src
- Aquest atribut especifica l'URI d'un script extern; això es pot utilitzar com una alternativa per a la incorporació d'un script directament dins d'un document. Si un element de script té un atribut
src
especificat, no ha de tenir un script incrustat dins les seves etiquetes. type
- Aquest atribut identifica el llenguatge de script de codi incrustat dins d'un element de script o referenciat a través de l'atribut src de l'element. Això s'especifica com un tipus MIME; exemples dels tipus MIME suportats inclouen
text/javascript
,text/ecmascript
,application/javascript
, iapplication/ecmascript
. Si aquest atribut està absent, el script és tractat com JavaScript. - Si el tipus MIME especificat no és un tipus JavaScript escriviu el contingut incrustat dins les seves etiquetes, es tracta com un bloc de dades que no serà processada pel navegador.
- Si el tipus especificat és mòdul el codi es tracta com un mòdul de JavaScript . Veure ES6 en Profunditat: Mòduls
Recordeu que Firefox pot utilitzar les funcions avançades com ara deixar que les declaracions i altres característiques en les versions posteriors JS, mitjançant l'ústype=application/javascript;version=1.8
. Aneu amb compte, però, que aquesta és una característica no estàndard, això farà que probablement s'interrompi el suport per a altres navegadors, en particular els navegadors basats en Chromium. - Per la manera d'incloure els llenguatges de programació exòtics, llegir sobre Rosetta.
text
- Igual que l'atribut
textContent
, aquest atribut estableix el contingut de text de l'element. A diferència de l'atributtextContent
, aquest atribut s'avalua com a codi executable després que el node s'insereix en el DOM. language
- Igual que l'atribut
type
, aquest atribut identifica el llenguatge de script en ús. A diferència de l'atributtype
, els possibles valors d'aquest atribut mai van ser estandarditzats. L'atributtype
s'ha d'utilitzar al seu lloc defer
- Aquest atribut booleà s'estableix per indicar a un navegador que el script està destinat a ser executat després que el document s'ha analitzat, però abans de activar
DOMContentLoaded
. L'atributdefer
no ha de ser utilitzat en els scripts que no tenen l'atributsrc
. crossorigin
- Elements normals dels scripts passen un mínim d'informació a
window.onerror
pels scripts que no passen els controls estàndard CORS Per permetre el registre d'errors per als llocs que utilitzen un domini separat per als medis estàtics, utilitzeu aquest atribut.
Exemples
<!-- HTML4 and (x)HTML -->
<script type="text/javascript" src="javascript.js"></script>
<!-- HTML5 -->
<script src="javascript.js"></script>
Especificacions
Especificació | Estat | Comentari |
---|---|---|
HTML Living Standard The definition of '<script>' in that specification. |
Living Standard | Afegeix el mòdul type |
HTML5 The definition of '<script>' in that specification. |
Recommendation | |
HTML 4.01 Specification The definition of '<script>' in that specification. |
Recommendation | |
Subresource Integrity The definition of '<script>' in that specification. |
Recommendation | Afegeix l'atribut integrity. |
Navegadors compatibles
Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Suport bàsic | 1.0 | 1.0 (1.7 or earlier)[2] | (Yes) | (Yes) | (Yes) |
atribut async | (Yes)[1] | 3.6 (1.9.2)[1] | 10[1] | 15[1] | (Yes)[1] |
atribut defer | (Yes) | 3.5 (1.9.1)[6] |
4[3] |
No support | (Yes) |
atribut crossorigin | 30.0 | 13 (13) | No support | 12.50 | (Yes)[4] |
atribut integrity | 45.0 | 43 (43) | No support[5] |
Característica | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Suport bàsic | (Yes) | (Yes) | 1.0 (1.0)[2] | (Yes) | (Yes) | (Yes) | (Yes) |
atribut async | (Yes)[1] | (Yes)[1] | 1.0 (1.0)[1] | No support[1] | ?[1] | (Yes)[1] | (Yes)[1] |
atribut defer | (Yes) | (Yes) | 1.0 (1.0) | No support | ? | (Yes) | (Yes) |
atribut integrity | No support | 45.0 | 43 (43) | 45.0 |
[1] En navegadors antics que no suporten l'atribut async
, els scripts inserits en l'analitzador bloquegen l'analitzador; en scripts inserits s'executen els scripts de forma asncrònica en IE i WebKit, però de forma sincrònica a Opera i Firefox pre-4.0. En Firefox 4.0, la propietat DOM async
es converteix per defecte en true
pels scripts creats per script, per la qual cosa el comportament predeterminat coincideix amb el comportament de IE i WebKit.. En la sol·licitud d'inserció de scripts externs, els scripts s'executaran en l'ordre d'inserció en els navegadors on document.createElement("script").async
estigui avaluat a true
(com Firefox 4.0), establir .async=false
en els scripts que desitjeu mantenir l'ordre. Mai crideu a document.write()
des d'un script async
. En Gecko 1.9.2, cridar a document.write()
té un efecte impredictible. En Gecko 2.0, cridar a document.write()
des d'un script async
no té cap efecte (que no sigui la impressió d'un advertiment a la consola d'errors).
[2] A partir de Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1), inserir elements de script que s'han creat en cridar a document.createElement("script")
al DOM ja no imposa l'execució en ordre d'inserció. Aquest canvi permet a Gecko complir adequadament amb l'especificació HTML5. Perquè els scripts externs inserits en scripts s'executin en el seu ordre d'inserció, establiu .async=false
en ells.
A més, els elements <script>
dins d'elements <iframe>
, <noembed>
i <noframes>
són ara executats, per les mateixes raons.
[3] En les versions anteriors a Internet Explorer 10 Trident implementava <script>
per una especificació propietària. Des de la versió 10 s'ajusta a l'especificació W3C.
[4] L'atribut crossorigin
es va implementar en WebKit en WebKit errada 81438.
[5] WebKit errada 148363 seguiment de l'implementació a WebKit el Subresource Integrity (que inclou l'atribut integrity
).
[6] Des Gecko 1.9.2 (Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0), l'atribut defer
és ignorat en scripts que no tenen l'atribut src
. No obstant això, en Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0) els scripts en línia es diferiran si s'estableix l'atribut defer
.