65 votes

Pourquoi écrire <script type="text/javascript"> when the mime type is set by the server?

D'après ce que je comprends, les types de mime sont définis par le serveur Web. Pourquoi ajoutons-nous l'attribut type="text/javascript ou type="text/css" ? N'est-ce pas un attribut inutile et ignoré?

67voto

brainjam Points 11431

Douglas Crockford dit:

type="text/javascript"

Cet attribut est facultatif. Depuis Netscape 2, la programmation par défaut la langue dans tous les navigateurs a été Le JavaScript. En XHTML, cet attribut est nécessaire et inutile. En HTML, il est préférable de le laisser dehors. L' le navigateur ne sait pas quoi faire.

Il a également dit:

Le W3C n'a pas adopté l' language attribut, favorisant plutôt une type attribut qui prend un type MIME. Malheureusement, le type MIME n'a pas été normalisées, de sorte qu'il est parfois "text/javascript"ou "application/ecmascript" ou quelque chose d'autre. Heureusement, tous les navigateurs toujours choisir JavaScript en tant que langage de programmation par défaut, de sorte qu'il est toujours plus simple d'écrire <script>. Il est plus petit, et il fonctionne sur le la plupart des navigateurs.

Pour des fins de divertissement seulement, j'ai essayé les cinq scripts

  <script type="application/ecmascript">alert("1");</script>
  <script type="text/javascript">alert("2");</script>
  <script type="baloney">alert("3");</script>
  <script type="">alert("4");</script>
  <script >alert("5");</script>

Sur Chrome, mais l'ensemble de script 3 (type="baloney") a travaillé. IE8 n'a pas l'exécution d'un script 1 (type="application/ecmascript") ou un script 3. Basé sur ma non-exhaustive des échantillons de deux navigateurs, il semble que vous pouvez en toute sécurité ignorer l' type d'attribut, mais que vous l'utilisez, vous feriez mieux d'utiliser un cadre légal (navigateur est dépendante de la valeur.

28voto

Marcel Korpel Points 14633

Parce que, au moins en HTML 4.01 et XHTML 1(.1), de l' type d'attribut pour <script> éléments est nécessaire.

En HTML 5, type n'est plus nécessaire.

En effet, alors que vous devez utiliser text/javascript dans votre code source HTML, de nombreux serveurs envoyer le fichier avec l' Content-type: application/javascript. Lire plus au sujet de ces types MIME dans la RFC 4329.

Notez la différence entre la RFC 4329, qui a marqué text/javascript comme obsolète, et de recommander l'utilisation d' application/javascript, et la réalité dans laquelle certains navigateurs freak out sur <script> éléments contenant de l' type="application/javascript" (dans la source HTML, pas le HTTP Content-type d'en-tête du fichier qui est envoyé). Récemment, il y avait une discussion sur le WHATWG liste de diffusion à propos de cet écart (HTML 5 type par défaut est text/javascript), la lecture de ces messages dont le sujet Va vous considérer au sujet de la RFC 4329?

13voto

Alohci Points 30645

Boris Zbarsky (Mozilla), qui en sait probablement plus sur les entrailles de Gecko que quiconque, est disponible sur http://lists.w3.org/Archives/Public/public-html/2009Apr/0195.html du pseudocode répété ci-dessous pour décrire ce que font les navigateurs basés sur Gecko:

 if (@type not set or empty) {
   if (@language not set or empty) {
     // Treat as default script language; what this is depends on the
     // content-script-type HTTP header or equivalent META tag
   } else {
     if (@language is one of "javascript", "livescript", "mocha",
                             "javascript1.0", "javascript1.1",
                             "javascript1.2", "javascript1.3",
                             "javascript1.4", "javascript1.5",
                             "javascript1.6", "javascript1.7",
                             "javascript1.8") {
       // Treat as javascript
     } else {
       // Treat as unknown script language; do not execute
     }
   }
} else {
   if (@type is one of "text/javascript", "text/ecmascript",
                       "application/javascript",
                       "application/ecmascript",
                       "application/x-javascript") {
     // Treat as javascript
   } else {
     // Treat as specified (e.g. if pyxpcom is installed and
     // python script is allowed in this context and the type
     // is one that the python runtime claims to handle, use that).
     // If we don't have a runtime for this type, do not execute.
   }
}
 

5voto

Quentin Points 325526

Il permet aux navigateurs de déterminer si elles peuvent gérer le script/style de langue avant de faire une demande pour le script ou la feuille de style (ou, dans le cas de script intégré/de style, d'identifier qui est le langage utilisé).

Ce serait beaucoup plus important si il y avait eu plus de concurrence entre les langues dans le navigateur de l'espace, mais VBScript ne l'a jamais fait au-delà de IE et PerlScript ne l'a jamais fait au-delà d'une IE plugin spécifique tout en JSSS était assez nul pour commencer.

Le projet de HTML5 rend l'attribut facultatif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X