Pregunta ¿Cuándo es necesaria una sección CDATA dentro de una etiqueta de script?


¿Las etiquetas CDATA son necesarias en las etiquetas de script y, de ser así, 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>

836
2017-09-15 20:52


origen


Respuestas:


Se necesita 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 quieres poder escribir literal i<10 y a && b en lugar de i&lt;10 y a &amp;&amp; b, ya que 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 las secuencias de comandos que se almacenan en los archivos de origen externos, pero para cualquier JavaScript en línea en XHTML lo hará probablemente quiero usar una sección CDATA.

Tenga en cuenta que muchas páginas XHTML nunca fueron pensadas para ser analizadas como XML, en cuyo caso esto no será un problema.

Para una buena reseña sobre el tema, vea http://javascript.about.com/library/blxhtml.htm


551
2017-09-15 20:54



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 quiere que valide su marcado XHTML 1.0 (por ejemplo).

<script>
//<![CDATA[
    ...code...
//]]>
</script>

223
2017-09-15 20:58



HTML

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 de guiones en "</", que es correcto según el especificaciones.

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>

UN CDATA sección tiene sin 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 principalmente cierto).

XML

En XML, se aplican diferentes reglas. Tenga en cuenta que los navegadores que no son de IE solo utilizan un analizador XML si el documento XHMTL se sirve con un tipo de contenido XML.

Para el analizador XML, un script la etiqueta no es mejor que cualquier otra etiqueta. Particularmente, un nodo de script puede contener nodos secundarios no de texto, activados por "<"; y a"&"signo denota una entidad de personaje.

Entonces, en XHTML, esto es no posible:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

Para evitar esto, puede envolver todo el script en un CDATA sección. Esto le dice al analizador: 'En esta sección, no trates "<"y"&"como personajes de control. ' Para evitar que el motor de JavaScript interprete el "<![CDATA["y"]]>"marcas, puedes envolverlas en comentarios.

Si su script no contiene ningún "<"o"&", no necesitas una CDATA sección de todos modos.


117
2017-09-20 09:05



Básicamente es permitir escribir un documento que sea a la vez XHTML y HTML. El problema es que dentro de XHTML, el analizador XML interpretará los caracteres &, <,> en guión etiqueta y causa error de análisis XML. Por lo tanto, puede escribir su JavaScript con entidades, por ejemplo:

if (a &gt; b) alert('hello world');

Pero esto no es práctico. El problema más grande es que si lee la página en HTML, la etiqueta guiónse considera CDATA 'por defecto', y dicho JavaScript no se ejecutará. Por lo tanto, si desea que la misma página sea correcta tanto con los analizadores XHTML como HTML, debe adjuntar el guión etiqueta en el elemento CDATA en XHTML, pero NO para encerrarlo en HTML.

Este truco marca el comienzo 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 que JavaScript) lo detecta y trata el resto hasta el final de CDATA como CDATA.


29
2018-03-01 19:26



Es una cosa X (HT) ML. Cuando usas símbolos como < y > dentro de JavaScript, p. para comparar dos enteros, esto tendría que analizarse como XML, por lo que marcarían como principio o final de una etiqueta.

El CDATA significa que las siguientes líneas (todo hasta el ]]> no es XML y, por lo tanto, no debe analizarse de esa manera.


22
2018-03-01 19:19



Hacer no usa CDATA en HTML4 pero tú debería use CDATA en XHTML y debe use CDATA en XML si tiene símbolos sin guardar como <y>.


16
2017-09-15 20:56



Para garantizar que la validación XHTML funcione correctamente cuando tiene JavaScript incrustado en su página, en lugar de referencia externa.

XHTML requiere que su página cumpla estrictamente con los requisitos de marcado XML. Como JavaScript puede contener caracteres con un significado especial, debe envolverlo en CDATA para garantizar que la validación no lo señale como incorrecto.

Con las páginas HTML en la web puede simplemente incluir el JavaScript requerido entre y las etiquetas. Cuando valida el HTML en su página web, el contenido de JavaScript se considera que es CDATA (datos de caracteres) que el validador ignora. Lo mismo no es cierto si sigue los estándares XHTML más recientes 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, procesa 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).

Puedes aprender más sobre CDATA aquíy más sobre XHTML aquí.


16
2018-03-01 19:20