HTML
Un analizador HTML tratará todo entre <script>
y </script>
como parte del script. Algunas implementaciones ni siquiera necesitan una etiqueta de cierre correcta; detienen la interpretación del guión en " </
", lo cual es correcto según las especificaciones .
Actualización en HTML5, y con los navegadores actuales, ese ya no es el caso.
Entonces, en HTML, esto no es posible:
<script>
var x = '</script>';
alert(x)
</script>
Una CDATA
sección no tiene ningún efecto . Por eso necesitas escribir
var x = '<' + '/script>'; // or
var x = '<\/script>';
o similar.
Esto también se aplica a los archivos XHTML servidos como text/html
. (Dado que IE no admite tipos de contenido XML, esto es principalmente cierto).
XML
En XML, se aplican diferentes reglas. Tenga en cuenta que los navegadores (no IE) solo usan un analizador XML si el documento XHMTL se sirve con un tipo de contenido XML.
Para el analizador XML, una script
etiqueta no es mejor que cualquier otra etiqueta. Particularmente, un nodo de secuencia de comandos puede contener nodos secundarios sin texto, activados por " <
"; y un &
signo " " denota una entidad de carácter.
Entonces, en XHTML, esto no es posible:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Para evitar esto, puede ajustar todo el script en una CDATA
sección. Esto le dice al analizador: 'En esta sección, no trate " <
" y " &
" como caracteres de control ". Para evitar que el motor de JavaScript interprete las marcas " <![CDATA[
" y " ]]>
", puede ajustarlas en comentarios.
Si su script no contiene ningún " <
" o " &
", no necesita una CDATA
sección de todos modos.