Warum läuft dieses Javascript nicht in Chrome?

8

Wenn ich dies in Chrome (Version 2) ausführe, gibt es die Zeichenfolge nicht zurück, aber es funktioniert in Firefox (Version 3). Warum ist das?

%Vor%     
ehfeng 17.04.2009, 22:17
quelle

3 Antworten

31

Um Inhalte an ein Dokument anzuhängen, sollten Sie document.write() nur während der & lt; script & gt; -Block-Analysephase aufrufen.

Wenn Sie einen Aufruf von document.write irgendwo außerhalb dieses Kontextes haben, wie in Ihrem Event-Handler, wird kein Parsing ausgeführt, also nirgends für den String 'foo' .

Was nach der ursprünglichen JavaScript-Referenz geschehen sollte, ist:

  

Ereignishandler werden ausgeführt, nachdem das Originaldokument geschlossen wurde, sodass die Schreibmethode implizit ein neues Dokument mimeType text / html öffnet, wenn Sie nicht explizit eine Methode document.open im Ereignishandler ausgeben.

Das heißt, es setzt voraus, dass Sie einen Fehler gemacht haben und tun sollten:

%Vor%

Was das gesamte Dokument durch neuen Inhalt ersetzt. Sie werden das auch bemerken, weil Sie das nicht mit dem Aufruf von

beendet haben %Vor%

... in Firefox animiert der 'loading' throbber immer noch und erwartet, dass mehr Inhalt in das Dokument geschrieben wird (aber es kommt nie).

In diesem Fall haben Sie document.write() einer Zeichenkette:

%Vor%

Das ist eindeutig kein gültiges HTML-Dokument. Chrome (und Safari, das sich gleich verhält) versucht, es als HTML-Dokument zu analysieren, schlägt aber fehl, weil es außerhalb des Dokumentelements (& lt; html & gt;) keinen Leerraum-Textinhalt gibt, der nicht erlaubt ist. Wenn Sie einige Tags in den Namen eingeben:

%Vor%

Sie sehen alles außerhalb des & lt; em & gt; Element wird verworfen. Firefox und IE schaffen es, ihre "Fix-up-Text außerhalb jedes Elements" mit der HTML-Regel zu brechen, um Sie zu retten, aber Chrome nicht.

Wenn Sie document.write() ein neues Dokument erstellen möchten, sollten Sie sicherstellen, dass es sich um ein vollständiges Dokument handelt:

%Vor%

Oder, wenn Sie document.write() eine Textzeichenfolge haben möchten, sollten Sie theoretisch Folgendes aufrufen:

%Vor%

vor dem write (). Aber Achtung, der Parameter mimetype wird von Chrome oder Safari nicht unterstützt. Sie behandeln immer, was Sie als HTML schreiben.

In jedem Fall möchten Sie diese Methode wahrscheinlich nicht verwenden . Wenn Sie die vorhandene Seite hinzufügen (oder ändern) möchten, sollten Sie normalerweise DOM-Methoden verwenden, z. B. den Text in einem Statusausgabe-Div setzen oder den Body-Inhalt mit innerHTML ersetzen.

document.write() wird an einigen Stellen benötigt (insbesondere, wenn Sie ein neues Fenster oder einen neuen Frame erstellen), aber ansonsten ist es generell das Falsche und sollte mit Argwohn betrachtet werden.

    
bobince 18.04.2009, 02:56
quelle
9

Verwenden Sie nicht document.write. wenn Sie es zu etwas wie

ändern %Vor%

document.write hat ziemlich seltsames Verhalten. Wohin soll der Text geschrieben werden?

    
Jimmy 17.04.2009 22:26
quelle
2

Fügen Sie einfach einige Absatz-Tags in den Schreibaufruf ein:

%Vor%     
GR1000 17.04.2009 23:37
quelle

Tags und Links