Question

Les balises CDATA sont-elles toujours nécessaires dans les balises de script et, le cas échéant, quand?

En d'autres termes, quand et où se trouve ceci:

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

préférable à ceci:

<script type="text/javascript">
...code...
</script>
Était-ce utile?

La solution

Une section CDATA est requise si vous souhaitez que votre document soit analysé au format XML (par exemple, lorsqu'une page XHTML est interprétée en tant que XML) et que vous souhaitez pouvoir écrire du littéral <10> au format . et a & amp; & amp; b au lieu de i < 10 et un & amp; amp; & 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 qui sont stockés dans des fichiers sources externes, mais pour tout code JavaScript intégré dans XHTML, vous voudrez probablement utiliser une section CDATA.

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

Pour une bonne rédaction sur le sujet, voir https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

Autres conseils

Lorsque les navigateurs traitent le balisage en tant que XML:

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

Lorsque les navigateurs traitent le balisage au format HTML:

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

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

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

HTML

Un analyseur HTML traitera tout ce qui se situe 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 du script à " < / ", ce qui est correct selon le spécifications .

  

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

Donc, en HTML, ce n'est pas possible:

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

Une section CDATA n'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 en tant que text / html . (IE ne prenant pas en charge les types de contenu XML, cela est généralement vrai.)

XML

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

Pour l'analyseur XML, une balise script n'est pas meilleure que toute autre balise. En particulier, un nœud de script peut contenir des nœuds enfants non textuels, déclenchés par " < "; et un " & amp; " le signe indique une entité de caractère.

Donc, en XHTML, cela n'est pas possible:

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

Pour contourner ce problème, vous pouvez envelopper l'ensemble du script dans une section CDATA . Cela dit à l'analyseur: 'Dans cette section, ne traitez pas " < ". et " & amp; " 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 pas de " < " ou " & amp; ", vous n'avez de toute façon pas besoin d'une section CDATA .

Il s’agit essentiellement de permettre d’écrire un document à la fois en XHTML et en HTML. Le problème est qu’en XHTML, l’analyseur XML interprète les paramètres & amp;, <, > des caractères dans la balise script et une erreur d’analyse XML. Vous pouvez donc écrire votre code JavaScript avec des entités, par exemple:

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

Mais cela n’est pas pratique. Le plus gros problème est que si vous lisez la page en HTML, la balise script est considérée comme CDATA "par défaut", et un tel JavaScript ne s'exécutera pas. Par conséquent, si vous souhaitez que la même page fonctionne correctement à l'aide d'analyseurs syntaxiques XHTML et HTML, vous devez inclure la balise script dans l'élément CDATA en XHTML, mais PAS 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.

C’est une chose X (HT) ML. Lorsque vous utilisez des symboles tels que < et > dans JavaScript, par exemple, pour comparer deux nombres entiers, cela devrait être analysé comme XML, ils seraient donc marqués comme un début ou une fin d’une balise.

CDATA signifie que les lignes suivantes (tout ce qui va jusqu'au ]] > ne sont pas du code XML et ne doivent donc pas être analysées de cette façon.

N'utilisez pas CDATA en HTML4, mais vous devriez utiliser CDATA en XHTML et devez utiliser CDATA en XML si vous avez des symboles non échappés tels que < ; et >.

Il permet de s'assurer que la validation XHTML fonctionne correctement lorsque du code JavaScript est intégré dans votre page, plutôt que référencé en externe.

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

  
    

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

         

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

  

Vous pouvez en savoir en savoir plus sur CDATA ici , et pour en savoir plus sur XHTML ici .

CDATA indique que le contenu qu'il contient n'est pas XML.

Voici une explication sur wikipedia

Lorsque vous optez pour une conformité XHTML stricte, vous avez besoin de CDATA afin que les caractères less et than ne soient pas marqués comme des caractères non valides.

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

CDATA indique au navigateur d’afficher le texte tel quel et de ne pas le rendre au format HTML.

CDATA indique que le contenu qu'il contient n'est pas XML.

CDATA est nécessaire dans tout dialecte XML, car le texte d'un nœud 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 les expressions rationnelles .

Références

Lorsque vous souhaitez valider (en XML / XHTML - merci, < a href = "https://stackoverflow.com/users/6436/loren-segal"> Loren Segal ).

Ainsi, les anciens navigateurs n'analyseront pas le code Javascript et la page ne se cassera pas.

Compatibilité avec les versions antérieures. Je dois l'aimer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top