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 du script à " </
", ce qui est correct selon les spécifications .
Mettre à jour En 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 CDATA
section n'a aucun effet . Voilà pourquoi vous devez écrire
var x = '<' + '/script>'; // or
var x = '<\/script>';
ou 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:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
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'une CDATA
section.