Quand une section CDATA est-elle nécessaire dans une étiquette de script?

les tags CDATA sont-ils nécessaires dans les Tags de script et si oui quand?

En d'autres termes, quand et où est-ce:

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

préférable à ceci:

<script type="text/javascript">
...code...
</script>
845
demandé sur Shog9 2008-09-16 00:52:14

15 réponses

une section CDATA est nécessaire si vous avez besoin de votre document pour analyser en XML (par exemple quand une page XHTML est interprétée en XML) et que vous voulez pouvoir écrire literal i<10 et a && b au lieu de i&lt;10 et a &amp;&amp; b , car XHTML analysera le code JavaScript en tant que données de caractères parés par opposition aux données de caractères par défaut. Ce n'est pas un problème avec les scripts qui sont stockés dans des fichiers sources externes, mais pour tout JavaScript en ligne dans XHTML vous probablement voulez utiliser une section CDATA.

notez que de nombreuses pages XHTML n'ont jamais été conçues pour être interprétées en XML, auquel cas ce ne sera pas un problème.

Pour un bon article sur le sujet, voir http://javascript.about.com/library/blxhtml.htm

552
répondu Michael Ridley 2012-09-06 13:39:19

lorsque les navigateurs traitent le balisage comme XML:

<script>
<![CDATA[
    ...code...
]]>
</script>

lorsque les navigateurs traitent le markup comme HTML:

<script>
    ...code...
</script>

lorsque les navigateurs traitent le markup comme HTML et que vous voulez que votre markup XHTML 1.0 (par exemple) soit validé.

<script>
//<![CDATA[
    ...code...
//]]>
</script>
224
répondu Shadow2531 2008-09-15 20:58:56

HTML

un analyseur HTML traitera tout entre <script> et </script> comme faisant partie du script. certaines implémentations n'ont même pas besoin d'une étiquette de fermeture correcte; elles arrêtent l'interprétation du script à </ ", ce qui est correct selon le specs .

mise à Jour En HTML5, et avec les navigateurs actuels, qui n'est pas le cas plus.

donc, en HTML, c'est pas possible:

<script>
var x = '</script>';
alert(x)
</script>

Un CDATA section a aucun effet . C'est pourquoi vous devez écrire

var x = '<' + '/script>'; // or
var x = '<\/script>';

ou similaire.

ceci s'applique également aux fichiers XHTML servis comme text/html . (Étant donné que IE ne supporte pas les types de contenu XML, c'est en grande partie vrai.)

XML

en XML, des règles différentes s'appliquent. Notez que les navigateurs (non IE) n'utilisent un analyseur XML que si le document XHMTL est servi avec un type de contenu XML.

pour L'analyseur XML, une balise script n'est pas meilleure que n'importe quelle autre balise. En particulier, un noeud de script peut contenir des noeuds enfants non textuels, déclenchés par " < "; et un signe " & " indique une entité de caractère.

donc, en XHTML, c'est pas possible:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

pour contourner cela, vous pouvez envelopper le script entier dans une section CDATA . Ceci indique à l'analyseur: 'dans cette section, ne traite pas " < " et " & " comme des caractères de contrôle .'Pour empêcher le moteur JavaScript d'interpréter les marques <![CDATA[ " et ]]> ", vous pouvez les envelopper dans des commentaires.

si votre script ne contient pas tout " < "ou" & ", vous n'avez pas besoin d'une section CDATA de toute façon.

117
répondu user123444555621 2017-11-21 16:23:18

fondamentalement, il est de permettre d'écrire un document qui est à la fois XHTML et HTML. Le problème est que dans XHTML, L'analyseur XML interprétera les caractères &,<,> dans la balise script et causera une erreur D'analyse XML. Ainsi, vous pouvez écrire votre JavaScript avec des entités, par exemple:

if (a &gt; b) alert('hello world');

mais ce n'est pas pratique. Le plus gros problème est que si vous lisez la page en HTML, la balise script est considéré CDATA ' par par défaut', et ce JavaScript ne s'exécute pas. Par conséquent, si vous voulez que la même page soit OK à la fois en utilisant XHTML et les parsers HTML, vous devez inclure la balise script dans L'élément CDATA dans XHTML, mais pas l'inclure dans HTML.

cette astuce marque le début d'un élément CDATA comme commentaire JavaScript; en HTML le parser JavaScript ignore la balise CDATA (c'est un commentaire). En XHTML, L'analyseur XML (qui est exécuté avant le JavaScript) le détecte et traite le reste jusqu'à la fin de CDATA en CDATA.

29
répondu ondra 2014-11-30 08:14:23

c'est un truc de X(HT)ML. Lorsque vous utilisez des symboles comme < et > dans le JavaScript, par exemple pour comparer deux entiers, cela doit être interprété comme XML, donc ils marquent comme un début ou une fin d'étiquette.

le CDATA signifie que les lignes suivantes (tout jusqu'au ]]> n'est pas XML et ne doit donc pas être interprété de cette façon.

22
répondu Franz 2010-03-01 19:19:36

Faire pas utilisation CDATA en HTML4, mais vous devrait utilisation CDATA en XHTML et doit utilisation CDATA en XML si vous avez sans échappement les symboles < et >.

16
répondu Loren Segal 2008-09-15 20:56:21

il s'assure que la validation XHTML fonctionne correctement lorsque JavaScript est incorporé dans votre page, plutôt que référencé de l'extérieur.

XHTML exige que votre page soit strictement conforme aux exigences de balisage XML. Puisque JavaScript peut contenir des caractères ayant une signification particulière, vous devez l'envelopper dans CDATA pour vous assurer que la validation ne le signale pas comme étant malformé.

avec des pages HTML sur le web, vous pouvez simplement inclure le JavaScript requis entre et tags. Lorsque vous validez le HTML sur votre page web, le contenu JavaScript est considéré comme CDATA (données de caractères) qui est donc ignoré par le validateur. La même chose n'est pas vraie si vous suivez les normes plus récentes XHTML dans la mise en place de votre page web. Avec XHTML le code entre les balises de script est considéré comme PCDATA (données de caractères parsés) qui est donc traité par le validateur.

pour cette raison, vous ne pouvez pas simplement inclure JavaScript entre les balises de script sur votre page sans 'casser' votre page web (du moins en ce qui concerne le validateur).

vous pouvez apprendre plus sur CDATA ici , et plus sur XHTML ici .

16
répondu LBushkin 2013-10-22 09:37:41

lorsque vous optez pour une stricte conformité XHTML, vous avez besoin du CDATA, donc moins que et les bracelets ne sont pas marqués comme des caractères invalides.

9
répondu Chris Shaffer 2008-09-15 20:54:38

CDATA indique que le contenu n'est pas XML.

Voici une explication sur wikipedia

9
répondu Alex Beardsley 2013-10-22 09:45:10

pour éviter les erreurs xml lors de la validation xhtml.

8
répondu gehsekky 2010-03-01 19:19:12

CDATA dit au navigateur d'afficher le texte tel quel et de ne pas le rendre HTML.

8
répondu Ikaso 2010-03-01 19:19:19

CDATA indique que le contenu n'est pas XML.

6
répondu Jim 2012-08-29 22:50:32

CDATA est nécessaire dans n'importe quel dialecte XML, parce que le texte dans un noeud XML est traité comme un élément enfant avant d'être évalué comme JavaScript. C'est aussi la raison pour laquelle JSLint se plaint du caractère < dans regexes.

Références

5
répondu Paul Sweatte 2017-05-23 12:26:33
2
répondu ceejayoz 2017-05-23 12:18:22

de cette façon, les navigateurs plus anciens ne parsèment pas le code Javascript et la page ne casse pas.

Rétro compatibilité. Gotta love it.

2
répondu Tyler Carter 2010-03-01 19:19:14