Quel est le meilleur: <script type = “text / javascript”>… </script> ou <script>… </script>

97

Quel est le meilleur ou le plus pratique à utiliser:

<script type="text/javascript">...</script> 

ou

<script>...</script>
crayonGâteau
la source
7
Si vous utilisez javascript comme langage, le premier est bien sûr meilleur
Chinmayee G
Je suppose que le gain de performances que vous obtenez en déclarant le script comme java-script est insignifiant, mais excellente question!
The_Butcher
10
La réponse «correcte» diffère-t-elle si nous sommes en Html v4 et Html v5?
Dimitrios Mistriotis
Il ne s'agit pas de savoir lequel est le meilleur, mais quand utiliser quoi; lors de l'utilisation de la déclaration HTML5 <!doctype html>, il n'est pas nécessaire d'utiliser l'indicateur de type MIME type="text/javascript"sur une <script>balise car il s'applique par défaut. D'autre part (non-HTML5), c'est conseillé et recommandé (en référence à l'indice de type MIME type="text/javascript").
nyedidikeke

Réponses:

137

Avez-vous besoin d'un attribut de type? Si vous utilisez HTML5, non. Sinon, oui. HTML 4.01 et XHTML 1.0 spécifient l' typeattribut comme requis tandis que HTML5 l'a comme facultatif, par défaut à text/javascript. HTML5 est maintenant largement implémenté, donc si vous utilisez le doctype HTML5, <script>...</script>c'est valide et un bon choix.

Quant à ce que doit contenir l'attribut type, le type MIME application/javascriptenregistré en 2006 est destiné à remplacer text/javascriptet est pris en charge par les versions actuelles de tous les principaux navigateurs (y compris Internet Explorer 9). Une citation de la RFC pertinente :

Ce document définit donc text / javascript et text / ecmascript mais les marque comme "obsolètes". L'utilisation de types de supports expérimentaux et non enregistrés, comme indiqué en partie ci-dessus, est déconseillée. Les types de supports,

  * application/javascript
  * application/ecmascript

qui sont également définis dans ce document, sont destinés à un usage courant et doivent être utilisés à la place.

Cependant, IE jusqu'à et y compris la version 8 n'exécute pas de script à l'intérieur d'un <script>élément avec un typeattribut de l'un application/javascriptou l' autre application/ecmascript, donc si vous avez besoin de prendre en charge l'ancien IE, vous êtes coincé avec text/javascript.

Tim Down
la source
3
Vous n'avez pas "besoin" de l' typeattribut. La validation contre HTML4.01 ou XHTML 1.0 n'est plus ce que vous devriez faire de toute façon, et tous les navigateurs prendront en charge votre balise sanstext/javascript
Ian Storm Taylor
9
@Ian: Au moment de la rédaction de cet article, la spécification HTML5 était un brouillon de travail et ne s'était pas encore transformée en son statut actuel de cible en mouvement perpétuel. Les implémentations de navigateur de HTML5 étaient loin derrière ce qu'elles sont maintenant. Compte tenu de cela, je pense que HTML5 à l'époque n'était pas viable pour une utilisation sur le Web en général et ma réponse était absolument juste, et comportait toujours l'avertissement "si vous voulez que votre HTML soit valide" . Je serais d'accord que les choses ont évolué depuis et que cette réponse pourrait faire l'objet d'une révision, mais je ne suis pas d'accord pour dire que l'écriture de pages Web en HTML 4.01 est désormais toujours la mauvaise chose à faire.
Tim Down
1
+1, vient de découvrir cette question d'une dupe. Cela me rappelle plusieurs articles sur le blog d'Anne Van Kesteren, notamment de type JavaScript MIME , où il en parle. Je ne peux pas tout à fait le trouver, mais j'étais sûr qu'il y avait un article où il recommandait de ne pas l'utiliser typedu tout car cela fonctionne dans tous les navigateurs. C'était peut-être quelqu'un d'autre.
Andy E
1
Je voulais juste dire "merci" car j'essayais de comprendre pourquoi un fichier JS "application / javascript" n'était pas exécuté sur IE8 et les versions antérieures!
andrewtweber
qu'en est-il: "text / javascript; version = 1.8"?
SparK
10

Les deux fonctionneront mais la norme xhtml vous oblige à spécifier typeégalement:

<script type="text/javascript">..</script> 

<!ELEMENT SCRIPT - - %Script;          -- script statements -->
<!ATTLIST SCRIPT
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  type        %ContentType;  #REQUIRED -- content type of script language --
  src         %URI;          #IMPLIED  -- URI for an external script --
  defer       (defer)        #IMPLIED  -- UA may defer execution of script --
  >

type = content-type [CI] Cet attribut spécifie le langage de script du contenu de l'élément et remplace le langage de script par défaut. Le langage de script est spécifié comme type de contenu (par exemple, "texte / javascript"). Les auteurs doivent fournir une valeur pour cet attribut. Il n'y a pas de valeur par défaut pour cet attribut.

Remarque l'accent ci-dessus.

http://www.w3.org/TR/html4/interact/scripts.html

Remarque: à partir de HTML5 (loin), l' typeattribut n'est pas obligatoire et est par défaut.

Sarfraz
la source
9

Vous devez utiliser <script type="text/javascript"> </script>sauf si vous utilisez html5. Dans ce cas, vous êtes encouragé à préférer <script> ... </script>(car l'attribut type est spécifié par défaut à cette valeur)


la source
5

C'est tout ce qu'il faut:

<!doctype html>
<script src="/path.js"></script>
chovy
la source
3

<script type="text/javascript"></script> parce que c'est la bonne manière et compatible avec tous les navigateurs

pooja
la source
-2

Avec le dernier Firefox, je dois utiliser:

<script type="text/javascript">...</script>

Sinon, le script peut ne pas s'exécuter correctement.

Stephen Elliott
la source