</script>
tiene que dividirse porque de lo contrario terminaría demasiado pronto el bloque <script></script>
que lo contiene. Realmente se debe dividir entre la <
y la /
, porque un bloque de script se supone (según SGML) para ser terminated by any end-tag open (ETAGO) sequence (i.e. </
):
Aunque el estilo y los elementos de script usan CDATA por su modelo de datos, para estos elementos, CDATA debe ser manejado de manera diferente por los agentes de usuario. El marcado y las entidades se deben tratar como texto sin formato y pasar a la aplicación como está. La primera aparición de la secuencia de caracteres "</
" (delimitador abierto de etiqueta final) se considera como la terminación del final del contenido del elemento. En documentos válidos, esta sería la etiqueta final para el elemento.
Sin embargo, en la práctica los navegadores único fin analizar un bloque de script CDATA en un primer etiqueta real </script>
.
En XHTML no existe un manejo especial para bloques de script, por lo que cualquier carácter <
(o) debe ser &escaped;
como en cualquier otro elemento. Sin embargo, los navegadores que están analizando XHTML como HTML de la vieja escuela se confundirán. Existen soluciones provisionales que involucran bloques CDATA, pero es más fácil simplemente evitar el uso de estos caracteres sin protección. Una mejor manera de escribir un elemento de script desde el guión que funciona en cualquier tipo de programa de análisis sería:
<script type="text/javascript">
document.write('\x3Cscript type="text/javascript" src="foo.js">\x3C/script>');
</script>
'\ /' es una secuencia de escape válida para '/ ', ¿por qué no usar sólo que en vez de esos escapes literales de cadena para '<'? P.ej. 'document.write ('' no es la única secuencia de caracteres que puede cerrar un elemento '
Creo que es para prevenir el analizador HTML del navegador de interpretar el guión < >, y sobre todo la </script > como la etiqueta de cierre de la escritura real, sin embargo, no creo que el uso de document.write es una excelente idea para evaluar los bloques de script, ¿por qué no usar el DOM ...
Fuente
2008-10-25 08:08:20 CMS
Es necesario evitar que el analizador se cierre el script del bloque antes de tiempo ... – roenving
Aquí es otra variación que he usado cuando se quiere generar una línea etiqueta de script (por lo que se ejecuta inmediatamente) sin necesidad cualquier forma de escapes:
(Nota: al contrario de la mayoría de los ejemplos en la red, no estoy estableciendo en
type="text/javascript"
ni la etiqueta donde se incluye, ni el generado una: no hay navegador que no tengan dicho como predeterminado , por lo que es redundante, pero tampoco le hará daño, si no está de acuerdo).Fuente
2013-09-16 16:21:24 Stoffe
Buen punto re: escribir. El valor predeterminado se define como "texto/javascript" a partir de HTML5, por lo que es un atributo inútil. http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#attr-script-type – Luke
Este es mejor que la respuesta aceptada porque esta variación puede ser realmente minimizada. Este 'x3C/script>' se convertirá en '' después de la minificación. –
La solución que Bobince publicó funciona perfectamente para mí. Quería ofrecer un método alternativo, así como para los futuros visitantes:
En este ejemplo, he incluido una carga condicional para jQuery para demostrar caso de uso. Espero que sea útil para alguien!
Fuente
2013-12-04 12:55:49 Jongosi
no es necesario detectar el protocolo: el URI sin protocolo funciona bien ('//foo.com/bar.js', etc.) – dmp
sin necesidad de establecer la sincronización. está configurado para todas las etiquetas de scripts creadas dinámicamente. – Noishe
¡Me salvó! Al usar document.write (
</script>
dentro de Javascript string litteral es interpretado por el analizador de HTML como una etiqueta de cierre, lo que causa un comportamiento inesperado (see example on JSFiddle).Para evitar esto, puede colocar su javascript entre comentarios (este estilo de codificación era una práctica común, cuando JavaScript no era compatible con los navegadores). Esto funciona (see example in JSFiddle):
... pero para ser honesta, utilizando
document.write
no es algo que consideraría la mejor práctica. ¿Por qué no manipular el DOM directamente?Fuente
2014-11-25 10:04:15
Si quiere usar JS puro, querrá seguir usando document.write;) –
@NiravZaveri ¿Por qué? ¿Cómo es este código JS no puro? –
Disculpa, quise escribir: esto requiere la Biblioteca jQuery, ¿verdad? Cuando lo usé, document.body.append, arrojó un error que document.body.append no es una función. –
Cuestiones relacionadas