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>
javascript
html
xhtml
cdata
Brad
la source
la source
Réponses:
Une section CDATA est requise si vous avez besoin que votre document soit analysé en XML (par exemple lorsqu'une page XHTML est interprétée comme XML) et que vous souhaitez pouvoir écrire littéralement
i<10
eta && b
au lieu dei<10
eta && b
, car XHTML analysera le code JavaScript en tant que données de caractères analysés par opposition aux données de caractère par défaut. Ce n'est pas un problème avec les scripts qui sont stockés dans des fichiers source externes, mais pour tout JavaScript en ligne en 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 XML, auquel cas ce ne sera pas un problème.
Pour une bonne synthèse sur le sujet, voir https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm
la source
&
et<
, vous n'avez pas besoin d'une section CDATA; cela fonctionnera bien en HTML et en XHTML. Vous pouvez facilement y parvenir en mettant tout le code significatif dans des scripts externes et en utilisant simplement des scripts en ligne, par exemple. initialiser les variables (échapper&
/<
vers\x26
/\x3C
dans les littéraux de chaîne si vous en avez besoin).Lorsque les navigateurs traitent le balisage comme XML:
Lorsque les navigateurs traitent le balisage en HTML:
Lorsque les navigateurs traitent le balisage au format HTML et que vous souhaitez que votre balisage XHTML 1.0 (par exemple) soit validé.
la source
/* ... */
car sinon, si les sauts de ligne sont supprimés, le code se casseraHTML
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 du script à ".</
", ce qui est correct selon les spécificationsDonc, en HTML, ce n'est pas possible:
Une
CDATA
section n'a aucun effet . Voilà pourquoi vous devez écrireou similaire.
Cela s'applique également aux fichiers XHTML servis en tant que
text/html
. (Étant donné qu'IE ne prend pas en charge les types de contenu XML, cela est principalement vrai.)XML
En XML, différentes règles 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
script
balise n'est pas meilleure qu'une autre balise. En particulier, un nœud de script peut contenir des nœuds enfants non textuels, déclenchés par "<
"; et un&
signe " " indique une entité de caractère.Donc, en XHTML, ce n'est pas possible:
Pour contourner ce problème, vous pouvez encapsuler l'intégralité du script dans une
CDATA
section. Cela indique à l'analyseur: 'Dans cette section, ne traitez 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 encapsuler dans des commentaires.Si votre script ne contient aucun "
<
" ou "&
", vous n'avez de toute façon pas besoin d'uneCDATA
section.la source
</
balises de script internes étaient mauvaises.<script>var b = "<b>bold</b>";</script>
échoue à valider mais après avoir lu votre réponse et changé pour la<script>var b = "<b>bold<\/b>";</script>
corriger.Fondamentalement, il s'agit de permettre d'écrire un document à la fois XHTML et HTML. Le problème est que dans XHTML, l'analyseur XML interprétera les caractères &, <,> dans la balise de script et provoquera une erreur d'analyse XML. Ainsi, vous pouvez écrire votre JavaScript avec des entités, par exemple:
Mais ce n'est pas pratique. Le plus gros problème est que si vous lisez la page en HTML, le script de balise est considéré 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 soit correcte à la fois en utilisant les analyseurs XHTML et HTML, vous devez joindre le script balise de dans l'élément CDATA dans XHTML, mais PAS pour l'enfermer dans 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 JavaScript) le détecte et traite le reste jusqu'à la fin de CDATA comme CDATA.
la source
C'est un truc X (HT) ML. Lorsque vous utilisez des symboles comme
<
et>
dans le JavaScript, par exemple pour comparer deux entiers, cela devrait être analysé comme XML, donc ils marqueraient comme un début ou une fin d'une balise.Le CDATA signifie que les lignes suivantes (tout ce qui précède
]]>
n'est pas XML et ne doit donc pas être analysé de cette façon.la source
Ne pas utiliser CDATA dans HTML4 mais vous devez utiliser CDATA en XHTML et doit utiliser CDATA en XML si vous avez des symboles comme unescaped <et>.
la source
Il permet de s'assurer que la validation XHTML fonctionne correctement lorsque vous avez JavaScript intégré à votre page, plutôt que référencé en externe.
XHTML requiert 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'encapsuler dans CDATA pour vous assurer que la validation ne le marque pas comme mal formé.
Vous pouvez en savoir plus sur CDATA ici , et plus sur XHTML ici .
la source
CDATA indique que le contenu qu'il contient n'est pas XML.
Voici une explication sur wikipedia
la source
Lorsque vous optez pour une conformité XHTML stricte, vous avez besoin du CDATA donc moins que et les esperluettes ne sont pas marquées comme des caractères non valides.
la source
pour éviter les erreurs xml lors de la validation xhtml.
la source
CDATA indique au navigateur d'afficher le texte tel quel et de ne pas le rendre au format HTML.
la source
CDATA indique que le contenu qu'il contient n'est pas XML.
la source
CDATA est nécessaire dans tout dialecte XML, car le texte dans 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 de la
<
caractère dans les expressions régulières.Références
la source
Quand vous voulez qu'il soit validé (en XML / XHTML - merci, Loren Segal ).
la source
De cette façon, les anciens navigateurs n'analysent pas le code Javascript et la page ne se casse pas.
Compatibilité descendante. Je dois l'aimer.
la source