Warum gilt document.write als „schlechte Praxis“?

Lesezeit: 7 Minuten

Warum gilt documentwrite als „schlechte
FlySwat

Ich kenne document.write gilt als schlechte Praxis; und ich hoffe, eine Liste mit Gründen zusammenstellen zu können, die einem Drittanbieter vorgelegt werden sollten, warum sie es nicht verwenden sollten document.write in Implementierungen ihres Analysecodes.

Bitte geben Sie Ihren Anspruchsgrund an document.write als schlechte Praxis unten.

Warum gilt documentwrite als „schlechte
Annakata

Einige der schwerwiegenderen Probleme:

  • document.write (im Folgenden DW) funktioniert nicht in XHTML

  • DW ändert das DOM nicht direkt, wodurch weitere Manipulationen verhindert werden (Versuch, Beweise dafür zu finden, aber es ist bestenfalls situativ)

  • DW, das ausgeführt wird, nachdem die Seite vollständig geladen wurde, überschreibt die Seite oder schreibt eine neue Seite oder funktioniert nicht

  • DW wird dort ausgeführt, wo es angetroffen wird: Es kann nicht an einem bestimmten Knotenpunkt injiziert werden

  • DW schreibt effektiv serialisierten Text, was nicht der Art und Weise entspricht, wie das DOM konzeptionell funktioniert, und es ist eine einfache Möglichkeit, Fehler zu erstellen (.innerHTML hat das gleiche Problem).

Es ist viel besser, den Safe und DOM-freundlich zu verwenden DOM-Manipulationsmethoden

  • -1, es modifiziert das DOM absolut. Alles andere ist in Ordnung. Während ich den Drang verstehe, mich auf Strukturen und Methoden zu verlassen, die Sie vor Schaden bewahren können, könnte dies ein Fall sein, in dem Sie das Baby mit dem Bade ausschütten.

    – vgl

    29. April 2009 um 15:50 Uhr

  • FireBug ist keine echte Repräsentation des DOM. Es ist der Versuch von Mozilla, HTML in ein DOM zu parsen. In der Firebug-DOM-Ansicht können Sie völlig kaputtes HTML richtig aussehen lassen.

    – FlySwat

    29. April 2009 um 16:17 Uhr

  • Das DOM ist die Datenstruktur, die zum Rendern der Seite verwendet wird, und als solche das A und O dessen, was der Benutzer auf der Seite sieht. Sie haben Recht, dass HTML != DOM ist, aber es ist unerheblich für die Frage, ob das DOM von DW geändert wird oder NICHT. Wenn DW das DOM nicht geändert hat, sehen Sie den Bildschirm nicht – das gilt für alle Browser und wird es immer sein, solange das DOM zum Rendern der Seite verwendet wird.

    – vgl

    29. April 2009 um 16:41 Uhr

  • “DW wird dort ausgeführt, wo es gefunden wurde” – nicht immer ein Nachteil, es könnte sogar für bestimmte Dinge als Vorteil angesehen werden, zB das Hinzufügen von Skriptelementen (eigentlich das Einzige, wofür ich DW verwenden würde, und selbst dann würde ich es mir zweimal überlegen).

    – nnnnn

    25. Dezember 2011 um 12:16 Uhr


  • @RicardoRivaldo Ja, das tun sie, wenn document.write wird aufgerufen, nachdem das Dokument vollständig geladen wurde

    – Iskata

    19. September 2013 um 2:37 Uhr

1646881510 0 Warum gilt documentwrite als „schlechte
Peter Bailey

Daran ist eigentlich nichts auszusetzen document.write, an sich. Das Problem ist, dass es sehr einfach ist, es zu missbrauchen. Grob sogar.

Für Anbieter, die Analysecode bereitstellen (wie Google Analytics), ist dies tatsächlich der einfachste Weg, solche Snippets zu verteilen

  1. Es hält die Skripte klein
  2. Sie müssen sich keine Gedanken darüber machen, bereits etablierte Onload-Ereignisse zu überschreiben oder die notwendige Abstraktion einzubeziehen, um Onload-Ereignisse sicher hinzuzufügen
  3. Es ist extrem kompatibel

Solange Sie nicht versuchen, es zu verwenden, nachdem das Dokument geladen wurde, document.write ist meiner bescheidenen Meinung nach nicht von Natur aus böse.

  • document.write macht wirklich schreckliche Dinge mit den HTML-Parsern und ist nur in einfachen Fällen “extrem kompatibel”.

    – Oliej

    29. April 2009 um 19:24 Uhr

  • Wie das Einfügen eines Analytics-Tags? Das ist schließlich ein Teil der ursprünglichen Frage. Und mit extrem kompatibel meine ich nur eine reine Browserunterstützung für die document.write-Methode.

    – Peter Bailey

    29. April 2009 um 19:28 Uhr

  • Alles, was mit den neuesten Versionen von Chrome / IE / Safari / Opera / FireFox funktioniert, gilt als kompatibel.

    – Schrittmacher

    12. Oktober 2014 um 8:22 Uhr


  • Onload-Ereignisse überschreiben? Und was … ist addEventListener zum?

    – m93a

    13. Februar 2015 um 19:48 Uhr

  • Chrome wird nicht ausgeführt document.write Aufrufe, die ein Skript einfügen, wenn bestimmte Bedingungen erfüllt sind.

    – Flimmer

    12. Juli 2017 um 15:21 Uhr

1646881510 484 Warum gilt documentwrite als „schlechte
Sean McMillan

Es kann Ihre Seite blockieren

document.write funktioniert nur, während die Seite geladen wird; Wenn Sie es aufrufen, nachdem die Seite geladen wurde, wird die gesamte Seite überschrieben.

Dies bedeutet effektiv, dass Sie es von einem Inline-Skriptblock aufrufen müssen – und das verhindert, dass der Browser Teile der folgenden Seite verarbeitet. Skripte und Bilder werden erst heruntergeladen, wenn der Schreibblock abgeschlossen ist.

1646881511 496 Warum gilt documentwrite als „schlechte
Kevin Hakanson

Eine weitere legitime Verwendung von document.write stammt aus dem HTML5 Boilerplate index.html Beispiel.

<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.3.min.js"><\/script>')</script>

Ich habe auch die gleiche Technik für die Verwendung von gesehen json2.js JSON-Parse/Stringify-Polyfill (benötigt von IE7 und darunter).

<script>window.JSON || document.write('<script src="https://stackoverflow.com/questions/802854/json2.js"><\/script>')</script>

1646881511 788 Warum gilt documentwrite als „schlechte
Verfolger1

Profi:

  • Dies ist der einfachste Weg, um Inline-Inhalte aus einem externen Skript (zu Ihrem Host/Ihrer Domäne) einzubetten.
  • Sie können den gesamten Inhalt in einem Frame/Iframe überschreiben. Ich habe diese Technik oft für Menü-/Navigationsstücke verwendet, bevor modernere Ajax-Techniken weit verbreitet waren (1998-2002).

Nachteil:

  • Es serialisiert die Rendering-Engine so, dass sie anhält, bis das externe Skript geladen ist, was viel länger dauern könnte als ein internes Skript.
  • Es wird normalerweise so verwendet, dass das Skript innerhalb des Inhalts platziert wird, was als schlechte Form angesehen wird.

  • Es gibt noch mehr Nachteile. Beispielsweise weigert sich Google Chrome, ausgeführt zu werden document.write das schafft <script> Tag unter bestimmten Umständen. developer.google.com/web/updates/2016/08/…

    – Flimmer

    12. Juli 2017 um 15:14 Uhr

  • @Flimm, es ist erwähnenswert, Ihr Kommentar ist über 8 Jahre nach meiner Antwort und dies fast 3 Jahre später. Ja, es gibt andere Nachteile … und ich wäre überrascht, wenn document.write selbst nicht verschwindet … sowie möglicherweise einige andere stark missbrauchte Schnittstellen.

    – Verfolger1

    16. April 2020 um 1:32 Uhr

Warum gilt documentwrite als „schlechte
Ry-

Hier ist mein Zwei-Pence-Wert, den Sie im Allgemeinen nicht verwenden sollten document.write für schweres Heben, aber es gibt einen Fall, in dem es definitiv nützlich ist:

http://www.quirksmode.org/blog/archives/2005/06/three_javascrip_1.html

Ich habe dies kürzlich entdeckt, als ich versuchte, eine AJAX-Slider-Galerie zu erstellen. Ich habe zwei verschachtelte Divs erstellt und angewendet width/height und overflow: hidden nach außen <div> mit JS. Dies war so, dass für den Fall, dass der Browser JS deaktiviert hatte, das div schweben würde, um die Bilder in der Galerie aufzunehmen – eine nette, anmutige Verschlechterung.

Die Sache ist, wie beim obigen Artikel, dass diese JS-Hijacking des CSS nicht einsetzte, bis die Seite geladen war, was einen kurzen Blitz verursachte, als das div geladen wurde. Also musste ich beim Laden der Seite eine CSS-Regel schreiben oder ein Blatt einfügen.

Offensichtlich funktioniert dies nicht in XHTML, aber da XHTML so etwas wie eine tote Ente zu sein scheint (und als Tag-Suppe im IE gerendert wird), könnte es sich lohnen, Ihre Wahl von DOCTYPE neu zu bewerten …

  • Es gibt noch mehr Nachteile. Beispielsweise weigert sich Google Chrome, ausgeführt zu werden document.write das schafft <script> Tag unter bestimmten Umständen. developer.google.com/web/updates/2016/08/…

    – Flimmer

    12. Juli 2017 um 15:14 Uhr

  • @Flimm, es ist erwähnenswert, Ihr Kommentar ist über 8 Jahre nach meiner Antwort und dies fast 3 Jahre später. Ja, es gibt andere Nachteile … und ich wäre überrascht, wenn document.write selbst nicht verschwindet … sowie möglicherweise einige andere stark missbrauchte Schnittstellen.

    – Verfolger1

    16. April 2020 um 1:32 Uhr

1646881512 783 Warum gilt documentwrite als „schlechte
Alemb

Es überschreibt Inhalte auf der Seite, was der offensichtlichste Grund ist, aber ich würde es nicht als “schlecht” bezeichnen.

Es hat einfach nicht viel Nutzen, es sei denn, Sie erstellen ein ganzes Dokument mit JavaScript. In diesem Fall können Sie mit document.write beginnen.

Trotzdem nutzen Sie das DOM nicht wirklich, wenn Sie document.write verwenden – Sie werfen nur einen Textklumpen in das Dokument, also würde ich sagen, dass es eine schlechte Form ist.

  • Eine Klarstellung: document.write fügt Inhalte auf der Seite ein, überschreibt sie nicht.

    – Peter Dolberg

    29. April 2009 um 15:45 Uhr

  • @Peter, es überschreibt den Inhalt, wenn Sie es aufrufen, nachdem das Dokument geladen wurde. Ich vermute, das ist es, was aleemb bedeutet.

    – Matthew Crumley

    29. April 2009 um 17:09 Uhr

  • Schlagen Sie vor, dass man stattdessen die einzelnen DOM-Knoten manuell im Code erstellen sollte, anstatt nur so etwas zu tun? div.innerHTML = "<label for='MySelect'>Choose One</label><select id='MySelect'><option value='foo' selected=''>foo</option><option value='bar'>bar</option></select>";? Das scheint, als würde es viel unnötigen und weniger lesbaren Code produzieren. Es ist auch das genaue Gegenteil von dem Ansatz, den John Resig und andere JS-Entwickler vertreten.

    – Lèse Majesté

    26. Dezember 2012 um 8:25 Uhr


985830cookie-checkWarum gilt document.write als „schlechte Praxis“?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy