2010-04-01 19 views
9

¿Qué cosas malas suceden en el momento en que se invoca document.write()?¿Qué daño está hecho por document.write()?

He oído fragmentos sobre document.write que tienen un impacto adverso en el DOM o en el uso de bibliotecas Javascript. Tengo un problema frente a mí que sospecho que está relacionado, pero no he podido encontrar un resumen conciso de qué daño hace el método.

Respuesta

13

El uso de document.write() se romperá una página web - destruir y sobrescribir todo el DOM - si se llama después de que el documento ha terminado de ser analizada. Esto se considera un uso deficiente de document.write() y es/fue el motivo de críticas de muchos scripts antiguos.

window.onload = function() 
{ 
    document.write("Oops!"); 
} 

general, sin embargo, es aceptable y más ampliamente utilizado en el análisis sintáctico-tiempo para añadir algo de forma dinámica a la página de manera sincrónica:

<div> 
    <script type="text/javascript"> 
    document.write("Well I'll be, your browser supports JavaScript!"); 
    </script> 
</div> 

Se utiliza principalmente por los servicios de anuncios de publicación para la adición de los anuncios a una página, algunas API de Google también lo usan.

7

Bloqueo de página, eso es suficiente o un motivo cuando se usa incorrectamente.

Cuando se hace document.write, como dijo Andy, es sincrónico lo que significa que tiene que esperar antes de continuar con el resto de la página.

No quiero que su sitio cuelgue solo porque su servidor de anuncios está inactivo. Desafortunadamente, este es el caso con SO, los AD a la derecha usan document.write usando un script de otro servidor que, si está inactivo, bloquea la página para que no se cargue hasta que agote el tiempo. Este retraso, debido a document.write y un servidor de anuncios lento (a menudo de terceros) es demasiado a menudo la razón por la que un sitio tarda en cargarse.

Side rant: Los anuncios le hacen ganar dinero con las vistas, está bien, debe ganarse la vida. Pero no se dependiente en ellos desde una perspectiva técnica, como en su servidor está caído, su sitio es FUBAR ... hacer anuncios de una manera no bloqueante, hay muchas maneras además de document.write para lograr esto.

+0

Sí, me harté de los anuncios aquí bloqueando el resto de la página, por lo que ahora tienen 'ads.stackoverflow 127.0.0.1 .com' en mi archivo de hosts –

+0

+1 para la diatriba lateral, 'ads.stackoverflow.com' parece tener problemas de forma regular (la mayoría de las mañanas GMT). No es el mejor uso de 'document.write'. :-) –

+0

Escribí una lib que le permite cargar los guiones document.write async: http://github.com/iamnoah/writeCapture – noah

2

Solo quería agregar un fiddle para mostrar un ejemplo en vivo de lo que significaba Andy E.

Básicamente, el elemento de párrafo ya no estará visible porque document.write() lo sobrescribió.

0

Este fragmento lo probará:

window.onload = function() { 
 
    document.write("Because I will overwrite everything."); 
 
}
<p>Hello, I won't render anymore.</p>

Cuestiones relacionadas