HTML
Un analyseur HTML traitera de tout ce qui est entre <script>
et </script>
dans le cadre de l'exécution du script. Certaines implémentations ne avez même pas besoin d'une bonne balise de fermeture; ils s'arrêtent script interprétation à "</
", ce qui est correct selon les spécifications. [mise à jour]En HTML5, et avec les navigateurs actuels, qui n'est pas le cas aujourd'hui.[/mise à jour]
Donc, dans le HTML, c'est pas possible:
<script>
var x = '</script>';
alert(x)
</script>
Un CDATA
section a aucun effet. C'est pourquoi vous avez besoin d'écrire
var x = '<' + '/script>'; // or
var x = '<\/script>';
ou similaire.
Ceci s'applique également aux fichiers XHTML servi en tant que text/html
. (Depuis IE ne prend pas en charge XML types de contenu, c'est surtout vrai.)
XML
En XML, des règles différentes s'appliquent. Notez que (non IE) uniquement pour les navigateurs utiliser un analyseur XML si le document XHTML est servi avec un XML type de contenu.
De l'analyseur XML, script
balise n'est pas meilleure que toute autre balise. En particulier, un script nœud peut contenir de non-texte nœuds enfants, déclenchée par "<
"; et un "&
" signe dénote une entité de caractère.
Donc, en XHTML, c'est pas possible:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Pour contourner ce problème, vous pouvez envelopper l'ensemble du script en CDATA
section. Cela indique à l'analyseur: "Dans la présente section, ne pas traiter "<
" et "&
" comme des caractères de contrôle.' Pour empêcher le moteur JavaScript à partir de l'interprétation de la "<![CDATA[
" et "]]>
" des marques, vous pouvez les envelopper dans les commentaires.
Si votre script ne contiennent pas de "<
" ou "&
", vous n'avez pas besoin d'un CDATA
l'article de toute façon.