2010-04-01 16 views
9

Quali cose brutte accadono al momento è invocato lo document.write()?Che danno viene fatto da document.write()?

Ho sentito frammenti di document.write che hanno un impatto negativo sul DOM o sull'uso delle librerie Javascript. Ho un problema di fronte a me che sospetto sia correlato, ma non sono stato in grado di trovare un riassunto conciso di ciò che danneggia il metodo.

risposta

13

L'utilizzo di document.write() si romperà una pagina web - distruggendo e sovrascrivendo l'intera DOM - se si chiama dopo che il documento è finito di essere analizzato. Questo è considerato un uso inadeguato di document.write() ed è/è stato il motivo della critica di molti script meno recenti.

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

In generale però, è accettabile e piuttosto ampiamente utilizzato in parse in tempo per aggiungere qualcosa in modo dinamico alla pagina in modo sincrono:

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

E 'in gran parte utilizzato dai servizi di annunci editoriali per aggiungere gli annunci anche a una pagina, alcune API di Google la utilizzano.

7

Il blocco della pagina, è sufficiente o un motivo quando viene utilizzato in modo improprio.

Quando si document.write, come ha detto Andy, è sincrono che significa che devi attendere su di esso prima di continuare con il resto della pagina.

Non voglio che il tuo sito riagganci solo perché il server di annunci non funziona. Sfortunatamente, questo è il caso di SO, gli AD a destra usano document.write usando uno script da un altro server che, se è inattivo, blocca la pagina dal caricamento fino a quando scade. Questo ritardo, a causa di document.write e un ad server lento (spesso di terze parti) è lontano troppo spesso il motivo per cui un sito è lento da caricare.

Rant lato: gli annunci ti fanno guadagnare denaro dalle visualizzazioni, ok bene, devi guadagnarti da vivere. Ma non essere dipendente da su di essi da un punto di vista tecnico, come nel loro server è giù, il tuo sito è FUBAR ... fare annunci in modo non bloccante, ci sono molti modi oltre a document.write per raggiungere questo obiettivo.

+0

Sì ho stufo degli annunci sul qui bloccando il resto della pagina, quindi ora ho '127.0.0.1 ads.stackoverflow .com' nel mio file hosts –

+0

+1 per il lato rant, 'ads.stackoverflow.com' sembra avere problemi su base regolare (per lo più al mattino GMT). Non è il miglior uso di 'document.write'. :-) –

+0

Ho scritto una lib che ti permette di caricare gli script document.write async: http://github.com/iamnoah/writeCapture – noah

2

Volevo solo aggiungere un fiddle per mostrare un esempio dal vivo di ciò che intendeva Andy E.

Fondamentalmente l'elemento del paragrafo non sarà più visibile perché document.write() lo ha sovrascritto.

0

Questo frammento lo dimostrerà:

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

Problemi correlati