Sind document.open und document.close notwendig?

7

Ich teste etwas JavaScript-Code und erkannte, dass dieser Code ...

ist %Vor%

... hat das gleiche Ergebnis wie dieses:

%Vor%

Was ist der Unterschied?

    
reidark 09.01.2015, 05:41
quelle

3 Antworten

12

Vor den formalen Spezifikationen wurde viel Verhalten um document.write herum festgestellt, so dass das Verhalten in den Browsern inkonsistent und etwas willkürlich ist. Das Verhalten ist jetzt ziemlich konsistent, aber es gibt Unterschiede, je nachdem, wann es aufgerufen wird.

Die Verwendung von document.write wird größtenteils nicht empfohlen, ist jedoch immer noch nützlich. Es ist ubiquitärer Support bedeutet, dass es als Ersatz für andere Techniken verwendet werden kann, wenn wirklich alte Browser untergebracht werden müssen.

Während ein Dokument geladen wird

Wenn Sie document.write verwenden, während das Dokument geladen wird (z. B. ein Skriptelement in der Dokumentquelle), müssen Sie weder öffnen noch schließen. Das Dokument wird geöffnet, wenn nach dem Laden des Inhalts navigiert und geschlossen wird (d. H. Wenn das Ereignis load auftritt). Solange also alle write-Anweisungen ausgeführt werden, bevor load auftritt, erledigt der Browser den Rest.

Nach dem Fenster load Ereignis ausgelöst

Wenn das Dokument vollständig geladen ist (z. B. wenn das Ereignis load ausgelöst wurde), ruft ein Aufruf von document.write zuerst clear was den gesamten Inhalt des Dokuments löscht, alles. In diesem Fall rufen nicht alle Browser automatisch close auf, wenn der Aufruf von write endet.

Einige Browser nehmen eine Vermutung an und scheinen zu einem späteren Zeitpunkt nahe zu nennen (IE?), andere (Firefox, Safari) halten das Dokument offen, was zu ungewöhnlichem Verhalten führen kann.

Untergeordnete Fenster

Wenn Sie ein untergeordnetes Fenster öffnen, z. Wenn Sie window.open verwenden und dann vom übergeordneten Element aus darauf schreiben, wird der Schreibvorgang nach dem Laden der Seite ausgeführt, sodass das Dokument gelöscht wird. z.B.

%Vor%

In diesem Fall werden Sie Google nie sehen, der Aufruf von write löscht die Seite beim Laden und Schreiben des neuen Inhalts.

Browser rufen auch nicht automatisch schließen auf, Sie können nachfolgende Aufrufe an document.write tätigen und sie werden an das vorhandene Markup angehängt, z. B.

%Vor%

Möglicherweise sehen Sie eine Animation auf der Registerkarte oder im Fenster, die anzeigt, dass sie noch geladen wird.

Wenn openWindow vor dem Beenden document.close aufruft, löscht der nachfolgende Aufruf von writeToWindow das Dokument zuerst dass das div das einzige Element im Dokument ist (zusammen mit den obligatorischen HTML-, HEAD- und BODY-Elementen, die vom Browser automatisch hinzugefügt werden, und wahrscheinlich ein TITLE, der durch die Fehlerkorrektur hinzugefügt wurde).

Daher sollten Sie in diesem Fall an einem geeigneten Punkt schließen aufrufen.

Das OP

Wenn beim Laden Folgendes aufgerufen wird:

%Vor%

Also nur die document.write Zeile macht in diesem Fall etwas Sinnvolles.

Irgendein Spielcode:

%Vor%     
RobG 09.01.2015, 06:25
quelle
5

Der Unterschied zwischen open() und write() besteht darin, dass open() das Dokument löscht, sodass Sie darauf schreiben können. write() legt tatsächlich Zeug in das Dokument.

Das explizite Aufrufen von document.open() / document.close() ist nicht erforderlich, da document.write() implizit open() verarbeitet, wenn die Seite geladen wurde, und close() , wenn sie beendet ist.

Lesen Sie die Dokumentation hier

    
Henrik Andersson 09.01.2015 05:43
quelle
1
  
  1. document.open
  2.   

ist ein Geigenbeispiel Ссылка

mit diesem Code

%Vor%

Wie Sie in der Geige sehen können, werden die Dokumentinhalte überschrieben, da das Dokument am open().

neu initialisiert wird

Lesen Sie dies Ссылка

  
  1. document.close
  2.   

, während document.close nicht explixitly irgendwo getan werden muss. document.write schließt den Stream automatisch

  

Bearbeiten:

     

document.write schließt das Dokument beim Schreiben nicht immer immer   wurde aufgerufen, nachdem das Dokument geladen wurde (Firefox für   Beispiel). In diesem Fall (z. B. Schreiben in ein Kindfenster, das mit   window.open), es ist eine gute Vorsichtsmaßnahme, immer nahe zu schließen, wenn   fertig geschrieben.    Beitrag @RobG

    
Naeem Shaikh 09.01.2015 05:45
quelle

Tags und Links