¿Qué significa esto: “document.write (‘<scr' + 'ipt …"?

He visto esto en cada Yahoo! página de noticias , en la parte inferior del código fuente,
y no entendieron por qué rompen la palabra de la secuencia de comandos de esa manera.

¿Alguien sabe si hay alguna razón para esto?

document.write(""); 

Considera este ejemplo simplificado:

  something");  

El analizador HTML del navegador vería el dentro de la cadena de JavaScript e interpretaría eso como el final del elemento script.

El analizador de HTML no conoce la syntax de JavaScript; lo único que sabe es que el elemento finaliza en el siguiente .

(También sabe que no puede haber nested elementos , por lo tanto, la ruptura de la apertura y del cierre en su ejemplo).

Supongamos que está escribiendo una herramienta que detecta el comienzo y el final de los bloques de scripts en un fragmento de texto. Supongamos que ves

 ") print("  

Sin conocer la syntax del lenguaje de script, ¿cómo sabe su herramienta que este es UN bloque de scripts y no DOS bloques de scripts con “) blah entre ellos?

Un navegador web es una herramienta de este tipo. Es una práctica razonable asegurarse de que nunca confunda el navegador web al nunca tener o en su archivo a menos que realmente sea una etiqueta de script.

para que no se evalúe, sino que se inserta como una cadena.

Es una mala forma de evitar que los validadores XML / XHTML y HTML griten en el código fuente.

Algunos navegadores tienden a “actuar” rápidamente cuando analizan un documento e inmediatamente intentan ejecutar el javascript cuando encuentran una etiqueta de script (incluso si está en una pieza de js). Para evitar esto, rompen la etiqueta de la etiqueta.

Para una discusión completa de esto, ver:
http://www.wwco.com/~wls/blog/2007/04/25/using-script-in-a-javascript-literal/

La respuesta corta es que su código se analiza en dos pasos discretos.

El primero es XML. Y eso significa que el elemento

Una vez que tiene el contenido del elemento

Al dividir la etiqueta con un operador de concatenación de cadenas, evita que una constante interrumpa la fase XML.

Una solución simple es poner & lt; y & gt; en el texto Javascript