Avez-vous besoin de texte / javascript spécifié dans vos balises <script>?

157

J'ai lu quelque part que vous n'avez plus besoin de choses comme type="text/javascript"et les bizarres CDATAet les <!--choses dans vos balises de script. Donc, au lieu de:

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

Vous feriez juste:

<script>
    //your script here
</script>

Je ne me souviens pas où j'ai lu ça. C'était un ingénieur de Google ou Yahoo je pense, et ils ont spécifiquement mentionné quels navigateurs nécessitaient ces constructions archaïques et pourquoi. Quelqu'un sait de quel article de blog on a parlé ou a une bonne ressource pour en parler?

cmcculloh
la source
Pour les nouveaux navigateurs, mais sur les anciens (s'il en existe encore) <! - -> est nécessaire. À propos du type dans certaines applications, s'il n'est pas omis, il faut le bon.
Bakudan
1
Bonne lecture sur CDATA: stackoverflow.com/questions/66837/…
kapa
1
Chaque fois que j'ouvre un fichier avec text/javascriptspécifié, je le supprime. C'est du bruit.
The Muffin Man
Un article très lié ici contenant des informations à jour sur les directives HTML5 dans la réponse acceptée.
RBT

Réponses:

135

Voir la rédaction de Crockford sur l' <script>étiquette , notamment:

N'utilisez pas le <!-- //-->hack avec des scripts. Il était destiné à empêcher les scripts de s'afficher sous forme de texte sur les navigateurs de première génération Netscape 1 et Mosaic. Cela n'a pas été nécessaire depuis de nombreuses années. <!-- //-->est censé signaler un commentaire HTML. Les commentaires doivent être ignorés, non compilés et exécutés. De plus, les commentaires HTML ne doivent pas être inclus --, donc un script qui décrémente a une erreur HTML.

...

type="text/javascript"

Cet attribut est facultatif. Depuis Netscape 2, le langage de programmation par défaut de tous les navigateurs est JavaScript. En XHTML, cet attribut est obligatoire et inutile. En HTML, il vaut mieux le laisser de côté. Le navigateur sait quoi faire.

bdukes
la source
75
Nécessaire et inutile? Est-ce que je manque quelque chose?
Izkata
17
@Izkata, il est requis pour la validation, mais n'a aucun effet.
bdukes
14
"Le navigateur sait quoi faire" ... pour l'instant. Qu'en est-il de la semaine prochaine lorsque RubyScript (j'ai inventé ceci à titre d'exemple) est popularisé et que tout le monde craque pour l'adopter? C'est le même genre de pensée à courte vue qui fait que les gens nomment leurs fichiers «_new» et déroute les autres pendant des années. Est-ce le "_new"? Ou "_new_new"? Ou plus récent"? IMO c'est myope.
Slobaum
18
@Slobaum, la spécification HTML5 indique qu'elle utilise par défaut JavaScript . S'il existe de nouveaux types de scripts, ils ne seront implémentés que dans les nouvelles versions de navigateur prenant en charge cette valeur par défaut de la spécification.
bdukes
8
s'il RubyScriptdevient populaire, il se terminera .rbscriptet le navigateur agira en conséquence.
Kirk Strobeck
45

C'est une recommandation de Crockford . Je sais que je l'ai vu faire écho ailleurs (ppk peut-être?). La spécification HTML5 ne l'exige pas.

Curieusement, il est devenu un peu au courant d'utiliser l'attribut "type" pour marquer les <script>blocs que vous ne voulez pas être évalués:

<script type='text/html-template'>
  <div> this is a template </div>
</script>

En donnant un type étrange non JavaScript, vous obtenez un moyen de remplir du texte brut dans la page pour l'utiliser par un autre code JavaScript (qui est probablement dans un bloc de script qui peut être évalué).

Pointu
la source
je ne peux pas comprendre pleinement. s'il vous plaît expliquer, ce que type="text/html"signifie du tout, et ce que text/javascriptsignifie ... merci
T.Todua
4
@tazotodua ce n'est pas vraiment très important ce que signifie "text / html"; l'important est qu'il ne s'agisse pas de "texte / javascript", les navigateurs ignoreront complètement le contenu du <script>bloc. Cependant, le <script> fera partie du DOM, afin que d'autres codes JavaScript puissent les trouver et extraire leur contenu.
Pointy
C'est un hack intéressant. Je ne sais pas pourquoi je l'utiliserais.
brennanyoung
2
w3schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli
19

HTML5 n'a pas besoin de type="text/javascript"(c'est la valeur par défaut).

CDATA n'est nécessaire que pour les pages XHTML, si le script contient des caractères HTML (comme «<» et «>»).

<!-- ne devrait être nécessaire que pour les ANCIENS navigateurs.

Fusée Hazmat
la source
3

Eh bien, je suis tenté de dire que personne ne l'utilise text/javascriptplus, et que même les outils de minification le supprimeraient probablement ... En effet, la documentation du SDK Facebook précise juste <script>.

Cependant, la documentation du SDK Google l' a toujours text/javascript.

La documentation Amazon SDK a toujours text/javascript.

La documentation de l'API Linkedin a toujours text/javascript.

Instagram utilise toujours text/javascript.

osa
la source
3

L' attribut type identifie le langage de script du code incorporé dans un élément de script ou référencé via l'attribut src de l'élément. Ceci est spécifié comme un type MIME; des exemples de types MIME pris en charge incluent text / javascript, text / ecmascript, application / javascript et application / ecmascript.

Selon la spécification HTML 4.01

L' attribut type 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.

Mais en HTML5 text/javascript est le type par défaut, vous pouvez donc omettre

L' attribut type donne la langue du script ou le format des données. Si l'attribut est présent, sa valeur doit être un type MIME valide. Le paramètre charset ne doit pas être spécifié. La valeur par défaut, qui est utilisée si l'attribut est absent, est "text / javascript".

Mithun Sreedharan
la source
1
en d'autres termes, l'omettre pourrait provoquer des erreurs dans les anciens navigateurs qui ne prennent pas en charge HTML5
Serge
2

vous pensez peut-être cet article ici, la dépendance étant que les scripts par défaut utilisent automatiquement le texte / javascript en HTML5, tandis que les navigateurs non HTML5 s'attendent toujours à ce que vous définissiez le type spécifiquement, même s'ils devineront presque toujours le texte / javascript de toute façon .

FatherStorm
la source
1

c'est au navigateur d'interpréter scriptcorrectement le bloc en fonction des en-têtes, je crois, et non de l' typeattribut. Donc pour répondre à votre question, non ce n'est pas nécessaire pour les navigateurs modernes (je parle IE7 +, FF, Webkit). Si vous supportez des navigateurs plus anciens que ça ... je suis désolé pour vous =)

hellatan
la source
2
N'oubliez pas la Chine avec plus de 385 millions d'utilisateurs, dont beaucoup utilisent encore IE6. netmarketshare.com
...
3
connaissant la politique Internet stricte de la Chine, il y a de
fortes
La question concerne un script en ligne, il n'y a donc pas d'en-tête autre que la page principale (qui serait un type de contenu HTML). Quoi qu'il en soit, avez-vous une source indiquant que les navigateurs prennent en compte les en-têtes (par exemple, si vous avez un simple <script src = "something"> </script> et avez servi un en-tête VBScript, y a-t-il un navigateur qui l'interpréterait comme VBScript) ?
Matthew Flaschen
1

Si vous insérez une balise de script dans SVG, vous devez spécifier l'attribut type. Et ça devrait être "text/ecmascript"plutôt que"text/javascript" .

Si votre script est en ligne (non lié), vous devrez également envelopper le corps du script dans une déclaration CDATA. Le passe-partout de script en ligne pour SVG (et d'autres variantes XML) est donc

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

Il peut s'agir de cas spéciaux «à l'état sauvage», mais ils sont assez réels et l'utilisation de SVG augmente, il est donc incorrect pour quiconque de suggérer que l'attribut type et CDATA sont entièrement obsolètes dans les navigateurs modernes. Les cas d'utilisation sont étroits, oui, mais pas inconnus.

"Changez l'environnement à son contraire et chaque morceau de sagesse devient la pire de la folie." - Ashby

Brennanyoung
la source
1
Bon appel. Je viens de travailler sur un SVG complexe et c'est effectivement le cas!
Dave Everitt
1

👉🏻 La spécification HTML5 exhorte les auteurs à omettre l'attribut plutôt que de fournir un type MIME redondant. MDN

La norme de reniflage MIME permet de servir JavaScript à l'aide de tout type MIME ( extensions de messagerie Internet polyvalentes ) qui correspond à ce qui suit:

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>
Andy Young
la source
0

Eh bien, je continue à voir plus d'exemples sans le texte / javascript, mais pour une raison quelconque, mes scripts ne fonctionneront pas dans FF quand je le fais. Je recommanderais de conserver la déclaration text / javascript. La balise CDATA empêche javascript d'être affiché sous forme de texte brut sur votre site Web si votre navigateur a désactivé javascript. Personnellement, je n'utilise plus ces balises, je ne pense pas qu'il y ait beaucoup d'utilisateurs sans et s'ils sont là-bas, ils voudront peut-être faire pousser des cerveaux: P

Michael
la source
Ni l'attribut type ni l'ancien CDATA ne sont nécessaires à moins que vous ne souhaitiez vraiment cibler des navigateurs vraiment anciens. Cependant, ils ne devraient rien blesser tant que vous utilisez vraiment le bon type.
Pointy
J'utilise la version FF stable la plus récente et il semble avoir des problèmes d'analyse sans la déclaration de texte / javascript, j'utilise jQuery btw mais cela ne devrait pas faire de différence.
Michael
Eh bien, je lance toute mon application Web avec des balises de script qui sont simplement simples <script>, pas de "langage" ni de "type", et elles fonctionnent bien dans tous les navigateurs. (Eh bien, tous les raisonnables: FF, Chrome, Safari, IE, Opera.)
Pointy
1
@pointy semble que FatherStorm vient de publier une réponse expliquant pourquoi cela se produit. donc vos commentaires semblent incorrects.
Michael
@Michael, il se peut que si vous avez commis l'erreur d'utiliser XHTML / Strict, vous pourriez avoir un problème, mais même dans ce cas, j'en doute. Il y a un accord général parmi les sommités du monde JavaScript que l'attribut "type" n'est pas nécessaire, et en fait, comme un mauvais "type" cassera un script, c'est juste une source de bogues.
Pointy
0

type="text/javascript" : Requis en HTML 4 et XHTML, mais facultatif en HTML5.

CDATA : Obligatoire en XHTML.

<!--: Utilisé pour masquer le JavaScript des très anciens navigateurs. Par exemple: Netscape 1 et Internet Explorer 2, que personne n'utilise plus.

Blesson Jose
la source