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>
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<10
et a && 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
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>
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.
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 > 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.
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.
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 >.
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 .
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.
CDATA indique que le contenu n'est pas XML.
Voici une explication sur wikipedia
CDATA dit au navigateur d'afficher le texte tel quel et de ne pas le rendre HTML.
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
quand vous voulez qu'il valide (en XML/XHTML - merci, Loren Segal ).
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.