¿Las etiquetas CDATA son siempre necesarias en las etiquetas de script y, en caso afirmativo, cuándo?
En otras palabras, cuándo y dónde es esto:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
preferible a esto:
<script type="text/javascript">
...code...
</script>
Se requiere una sección CDATA si necesita que su documento se analice como XML (por ejemplo, cuando una página XHTML se interpreta como XML) y desea poder escribir i<10
y a && b
literales en lugar de i<10
y a && b
, como XHTML analizará el código JavaScript como datos de caracteres analizados en lugar de datos de caracteres de forma predeterminada. Esto no es un problema con los scripts que se almacenan en archivos de origen externos, pero para cualquier JavaScript en línea en XHTML, usted probablemente querrá usar una sección CDATA.
Tenga en cuenta que muchas de las páginas XHTML nunca se analizaron como XML, en cuyo caso esto no será un problema.
Para obtener una buena reseña del tema, consulte https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm
Cuando los navegadores tratan el marcado como XML:
<script>
<![CDATA[
...code...
]]>
</script>
Cuando los navegadores tratan el marcado como HTML:
<script>
...code...
</script>
Cuando los navegadores tratan el marcado como HTML y desea que su marcado XHTML 1.0 (por ejemplo) se valide.
<script>
//<![CDATA[
...code...
//]]>
</script>
Un analizador de HTML tratará todo entre <script>
y </script>
como parte de la secuencia de comandos. Algunas implementaciones ni siquiera necesitan una etiqueta de cierre correcta; detienen la interpretación del script en ".</
", que es correcta de acuerdo con specs
Actualizar En HTML5, y con los navegadores actuales, ese ya no es el caso.
Entonces, en HTML, esto es no posible:
<script>
var x = '</script>';
alert(x)
</script>
Una sección CDATA
tiene ningún efecto en absoluto . Es por eso que 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 cierto en su mayoría).
En XML, se aplican diferentes reglas. Tenga en cuenta que los navegadores (no IE) solo usan un analizador XML si el documento XHMTL se entrega con un tipo de contenido XML.
Para el analizador XML, una etiqueta script
no es mejor que cualquier otra etiqueta. En particular, un nodo de script puede contener nodos secundarios sin texto, activados por "<
"; y un signo "&
" denota una entidad de carácter.
Entonces, en XHTML, esto es no posible:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Para solucionar esto, puede envolver todo el script en una sección CDATA
. 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 envolverlas en comentarios.
Si su script no contiene ningún "<
" o "&
", no necesita una sección CDATA
de todos modos.
Básicamente es permitir escribir un documento que sea XHTML y HTML. El problema es que dentro de XHTML, el analizador XML interpretará los caracteres &, <,> en la etiqueta script y causará un error de análisis XML. Por lo tanto, puede escribir su JavaScript con entidades, por ejemplo:
if (a > b) alert('hello world');
Pero esto no es práctico. El mayor problema es que si lees la página en HTML, la etiqueta script se considera CDATA 'por defecto', y ese JavaScript no se ejecutará. Por lo tanto, si desea que la misma página sea correcta, tanto con XHTML como con analizadores HTML, debe incluir la etiqueta script en el elemento CDATA en XHTML, pero NO para incluirla en HTML.
Este truco marca el inicio de un elemento CDATA como un comentario de JavaScript; en HTML, el analizador de JavaScript ignora la etiqueta CDATA (es un comentario). En XHTML, el analizador XML (que se ejecuta antes de JavaScript) lo detecta y trata el resto hasta el final de CDATA como CDATA.
Es una cosa X (HT) ML. Cuando usa símbolos como <
y >
dentro del JavaScript, por ejemplo. para comparar dos enteros, esto debería analizarse como XML, por lo que se marcarían como principio o final de una etiqueta.
La CDATA significa que las siguientes líneas (todo hasta el ]]>
no es XML y, por lo tanto, no deben analizarse de esa manera).
Haga no use CDATA en HTML4, pero debería use CDATA en XHTML y must use CDATA en XML si tiene símbolos sin escapar como <y>.
Para asegurarse de que la validación XHTML funcione correctamente cuando tenga JavaScript incrustado en su página, en lugar de hacer referencia a él externamente.
XHTML requiere que su página se ajuste estrictamente a los requisitos de marcado XML. Dado que JavaScript puede contener caracteres con un significado especial, debe envolverlo en CDATA para asegurarse de que la validación no lo marque como incorrecto.
Con las páginas HTML en la web, solo puede incluir el JavaScript requerido entre las etiquetas y. Cuando valida el HTML en su página web, el contenido de JavaScript se considera CDATA (datos de caracteres) que, por lo tanto, el validador ignora. Lo mismo no es cierto si sigue los estándares más recientes de XHTML al configurar su página web. Con XHTML, el código entre las etiquetas de script se considera PCDATA (datos de caracteres analizados) que, por lo tanto, es procesado por el validador.
Debido a esto, no puede simplemente incluir JavaScript entre las etiquetas de script en su página sin "romper" su página web (al menos en lo que respecta al validador).
Puede aprender más sobre CDATA aquí , y más sobre XHTML aquí .
CDATA indica que los contenidos no son XML.
Aquí hay una explicación en wikipedia
Cuando opta por un cumplimiento estricto de XHTML, necesita el CDATA, por lo que menos de y los símbolos no se marcan como caracteres no válidos.
para evitar errores xml durante la validación xhtml.
CDATA le dice al navegador que muestre el texto tal como está y que no lo muestre como un HTML.
CDATA indica que los contenidos no son XML.
CDATA es necesario en cualquier dialecto XML, porque el texto dentro de un nodo XML se trata como un elemento secundario antes de ser evaluado como JavaScript. Esta es también la razón por la que JSLint se queja sobre el carácter <
en las expresiones regulares.
Referencias
Cuando quiera validar (en XML/XHTML - gracias, Loren Segal ).
De esa manera, el navegador antiguo no analiza el código Javascript y la página no se rompe.
Compatibilidad hacia atrás. Voy a amarlo.