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


Les balises CDATA sont-elles toujours nécessaires dans les balises 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>

836
2017-09-15 20:52


origine


Réponses:


Une section CDATA est requise si vous avez besoin que votre document soit analysé en tant que XML (par exemple lorsqu'une page XHTML est interprétée en XML) et vous voulez être capable d'écrire littéralement 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 analysées par opposition aux données de caractères par défaut. Ce n'est pas un problème avec les scripts stockés dans des fichiers sources externes, mais pour tout JavaScript intégré au format XHTML, Probablement vouloir utiliser une section CDATA.

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

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


551
2017-09-15 20:54



Lorsque les navigateurs traitent le balisage en XML:

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

Lorsque les navigateurs traitent le balisage en HTML:

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

Lorsque les navigateurs traitent le balisage en HTML et que vous souhaitez que votre balisage XHTML 1.0 (par exemple) soit validé.

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

223
2017-09-15 20:58



HTML

Un analyseur HTML traitera tout entre <script> et </script> dans le cadre du script. Certaines implémentations n'ont même pas besoin d'une balise de fermeture correcte; ils arrêtent l'interprétation des scripts à "</", ce qui est correct selon le spécifications.

Mettre à jour En HTML5, et avec les navigateurs actuels, ce n'est plus le cas.

Donc, en HTML, c'est ne pas possible:

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

UNE CDATA la section a aucun effet du tout. C'est pourquoi vous devez écrire

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

ou similaire.

Cela s'applique également aux fichiers XHTML servis text/html. (Étant donné que IE ne prend pas en charge les types de contenu XML, ceci est principalement vrai.)

XML

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

Pour l'analyseur XML, un script tag n'est pas meilleur que n'importe quel autre tag. En particulier, un nœud de script peut contenir des nœuds enfants non textuels, déclenchés par "<"et un"&"signe désigne une entité de caractère.

Donc, en XHTML, c'est ne pas possible:

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

Pour contourner ce problème, vous pouvez envelopper le script entier dans un CDATA section. Cela dit à l'analyseur: «Dans cette section, ne traite pas "<" et "&"en tant que caractères de contrôle. ' Pour empêcher le moteur JavaScript d'interpréter le "<![CDATA[" et "]]>"marques, vous pouvez les envelopper dans les commentaires.

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


117
2017-09-20 09:05



Fondamentalement, c'est pour 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 le scénario tag et provoquer 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 c'est impraticable. Le plus gros problème est que si vous lisez la page en HTML, le tag scénarioest considéré comme CDATA 'par défaut', et un tel JavaScript ne sera pas exécuté. Par conséquent, si vous souhaitez que la même page soit OK à la fois avec les analyseurs XHTML et HTML, vous devez inclure scénario tag dans l'élément CDATA en XHTML, mais PAS pour l'inclure en HTML.

Cette astuce marque le début d'un élément CDATA en tant que commentaire JavaScript. en HTML l'analyseur 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 tant que CDATA.


29
2018-03-01 19:26



C'est une chose X (HT) ML. Lorsque vous utilisez des symboles comme < et > au sein du JavaScript, par ex. Pour comparer deux entiers, il faudrait les analyser comme du XML, ainsi ils marqueraient comme le début ou la fin d'une étiquette.

Le CDATA signifie que les lignes suivantes (tout jusqu'à la ]]> n'est pas XML et ne devrait donc pas être analysé de cette façon.


22
2018-03-01 19:19



Faire ne pas utiliser CDATA en HTML4 mais vous devrait utiliser CDATA en XHTML et doit utilisez CDATA en XML si vous avez des symboles sans échappement tels que <et>.


16
2017-09-15 20:56



Il s'assure que la validation XHTML fonctionne correctement lorsque JavaScript est intégré à votre page, plutôt que référencé de manière externe.

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

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

Pour cette raison, vous ne pouvez pas inclure JavaScript entre les balises de script sur votre page sans «casser» votre page Web (au moins en ce qui concerne le validateur).

Tu peux apprendre plus sur CDATA ici, et plus sur XHTML ici.


16
2018-03-01 19:20