Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Por qué se divide la etiqueta <script> cuando se utiliza dentro de document.write()?

25 de octubre de 2011

Me gustaría saber por qué algunos sitios web (principalmente relacionados con los sitios de anuncios) siguen empleando la técnica de dividir las etiquetas <script> y <script> cuando las utilizan dentro de la instrucción document.write(). Por ejemplo Amazon utilizaba un código parecido a lo siguiente:

<script type='text/javascript'>
  if (typeof window['jQuery'] == 'undefined') document.write('<scr'+'ipt type="text/javascript" src="http://z-ecx.images-amazon.com/images/G/01/javascripts/lib/jquery/jquery-1.2.6.pack._V265113567_.js"></sc'+'ript>');
</script>
Estás leyendo una traducción autorizada de la pregunta Why split the <script> tag when writing it with document.write()? planteada por Dane en StackOverflow.

Respuestas

#1

El motivo es que estas etiquetas deben añadirse al navegador sin que antes sean interpretadas por este. Si por ejemplo añades la etiqueta de cierre </script> dentro de una cadena, entonces el navegador pensará que el bloque de JavaScript termina en ese punto y no ejecutará el resto de código.

Además de dividir las etiquetas, otros programadores prefieren usar bloques de tipo CDATA. Otra solución válida pero que casi nadie utiliza consiste en codificar el carácter < de las etiquetas <script> y </script> que están dentro de document.write(). Para ello, se puede usar la codificación \x3C que es el equivalente en JavaScript del carácter <. El resultado sería algo como lo siguiente:

<script type="text/javascript">
    document.write('\x3Cscript type="text/javascript" src="archivo.js">\x3C/script>');
</script>

@librosweb

10 octubre 2014, 9:51