• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] document.write

AW: split Funktion in Adwords Scripts

schmeckt mir nicht
Zu document.write:
In some cases, this method can affect the state of the HTML parser while the parser is running, resulting in a DOM that does not correspond to the source of the document (e.g. if the string written is the string "<plaintext>" or "<!--").
das selbe bei innerHTML
In other cases, the call can clear the current page first, as if document.open( ) had been called.
was soll das überhaupt? die aussage ist hirnrissig, da das so definiert ist
und das ist hier nicht der usecase
In yet more cases, the method is simply ignored or throws an exception.
das selbe bei innerHTML
To make matters worse, the exact behavior of this method can in some cases be dependent on network latency, which can lead to failures that are very hard to debug.
was soll das?
 
AW: split Funktion in Adwords Scripts

@mikdoe: ich werde nicht diskutieren. Hab' nur darauf hingewiesen, was das w3c dazu sagt. Jeder kann sich jetzt selbst eine Meinung bilden.

PS: eine Kleinigkeit muss ich aber loswerden: das erste
das selbe bei innerHTML
ist falsch! Aber da ich zu dem eigentlichen Problem nichts beisteuere, bin ich jetzt raus.
 
AW: split Funktion in Adwords Scripts

das erste ist falsch!
nein, dann hast du innerHTML nicht verstanden
Code:
<!doctype html>
<html>
  <head>
    <title ng-bind="$state.current.name"></title>
  </head>
  <body>
    <script>
      document.write("<!--");
    </script>
    text
  </body>
</html>
vs
Code:
<!doctype html>
<html>
  <head>
    <title ng-bind="$state.current.name"></title>
    <script>
      document.addEventListener("DOMContentLoaded", function()
      {
        document.body.innerHTML = "<!--" + document.body.innerHTML;
      }); 
    </script>
  </head>
  <body>
    text
  </body>
</html>
 
AW: split Funktion in Adwords Scripts

Mist... ich kann es nicht lassen...

Du vergleichst hier zwei verschiedene Szenarien. Das passende äquivalent für innerHTML wäre:
Code:
<!doctype html>
<html>
  <head>
    <title ng-bind="$state.current.name"></title>
  </head>
  <body>
    <script>
        document.body.innerHTML += "<!--";
    </script>
    text
  </body>
</html>

So, jetzt bin ich aber endgültig raus. Wenn du weiterdiskutieren willst: entweder per PN oder in einem speziellem Thread zu dem Thema.
 
AW: split Funktion in Adwords Scripts

Du vergleichst hier zwei verschiedene Szenarien.
ich vergleiche überhaupt nichts, du zitierst eine schwachsinnige aussage in der steht, dass man mit document.write beim schreiben eines kommentars tatsächlich auskommentiert - wer hätte das erwartet - und man deswegen lieber auf document.write verzichten soll.
ich zeige dir, dass man beim schreiben eines kommentars durch innerhtml auch auskommentiert.
kompletter müll die ganze aussage. hätten sie wenigstens ein beispiel gebracht, wo es wirklich zu erst mal nicht erwarteten ergebnissen führt, wenn man nicht genauer drüber nachdenkt, aber auch hier wieder - in beiden fällen
Code:
<!doctype html>
<html>
  <head>
    <title></title>
  </head>
  <body>
    <div>
      <script>
        document.write("<!--");
      </script>
    </div>
    text
    <div>
      <script>
        document.write("-->");
      </script>
    </div>
  </body>
</html>
vs
Code:
<!doctype html>
<html>
  <head>
    <title></title>
  </head>
  <body>
    <div>
      
    </div>
    text
    <div>
      
    </div>
    <script>
      var d = document.getElementsByTagName("div");
      d[0].innerHTML = "<!--";
      d[1].innerHTML = "-->";
    </script>
  </body>
</html>
in beiden fällen nicht das was der anwender erwarten würde. gut, bei document.write wird ihm das schnell klar werden, bei der innerHTML variante muss er wissen, wie innerHTML arbeitet.
das ist aber weder ein grund nicht document.write zu verwenden, noch auf innerHTML zu verzichten.
 
Zuletzt bearbeitet:
@tsseh: hast du deinen Code überhaupt laufen lassen?
Anscheinend nicht, denn der mit innerHTML liefert nicht das Ergebniss, das du es anscheinend erwartest, und der mit dem write läuft auch nicht ganz so, wie du meinst, da das zweite write gar nicht ausgeführt wird... womit wir exakt ein Beispiel hätten warum man das nicht verwenden sollte! Danke dafür.

Wenn du hier schon groß auf den Putz haust, solltest du erst einmal deine Aussagen überprüfen.

in beiden fällen nicht das was der anwender erwarten würde.
das was bei innerHTML rauskommt hätte ich auf Anhieb so erwartet. Aber ich muss zugeben dass mich das Ergebnis vom write erst einmal irritiert hat.
 
@tsseh: hast du deinen Code überhaupt laufen lassen?
Anscheinend nicht,
j, habe ich nicht, sehe aber jetzt auch beim 2. blick erst mal keine fehler

denn der mit innerHTML liefert nicht das Ergebniss, das du es anscheinend erwartest,
was erwarte ich denn? ein js anfänger erwartet sicherlich, dass alles ab dem </div> bis zum nächsten <div> auskommentiert ist.

und der mit dem write läuft auch nicht ganz so, wie du meinst, da das zweite write gar nicht ausgeführt wird...
reden wir hier nicht gerade über
nicht erwarteten ergebnissen
?

womit wir exakt ein Beispiel hätten warum man das nicht verwenden sollte! Danke dafür.
nein, womit wir ein Beispiel hätten wo man 2 mal hinkucken muss. genau wie bei innerhtml.

Wenn du hier schon groß auf den Putz haust, solltest du erst einmal deine Aussagen überprüfen.
im gegensatz zu dir will ich nicht stänkern und auf meiner meinung beharren, sondern diskutieren. deswegen bringe ich auch mal ein beispiel, was schwachstellen einer funktion aufzeigt. nur ist das kein grund diese deswegen in einem normalen usecase nicht zu nutzen.

das was bei innerHTML rauskommt hätte ich auf Anhieb so erwartet.
ja und? ich auch.

Aber ich muss zugeben dass mich das Ergebnis vom write erst einmal irritiert hat.
ein kommentar kommentiert aus
 
das hat im anderen thread aber nicht geklappt.
ach ja, du has meine aussagen ja verschoben, was ich als frechheit empfinde und den thread geschlossen, was ich beides als schwach empfinde.

und die aussage "Ich würde ja document.write nicht verwenden, allerdings generell.", ist genauso schwachsinnig wie "ich würde ja keinen fisch essen". und das ist sachlich korrekt.
 
hesst du solltest an deinem benehmen arbeiten. wenn jemand sagt was er machen oder nicht machen würde hast du das weder zu bewerten noch beleidigend zu werden. denn das ist eine persönliche haltung.

du darfst gern anderer meinung sein und das auch begründen aber nicht persönlich und schon garnicht unsachlich zu werden.

letzte ermahnung an dich!
 
ein js anfänger erwartet sicherlich, dass alles ab dem </div> bis zum nächsten <div> auskommentiert ist.
Das glaube ich nicht - kann ich aber gerade nicht beurteilen, da ich kein Anfänger mehr bin.

ein kommentar kommentiert aus
Das ist mir klar - aber bitte sage mir, was du bei dem write Beispiel als Ausgabe erwartest hast, als du es geschrieben hast. Nicht jetzt, sondern als du es gepostet hast.

im gegensatz zu dir will ich nicht stänkern
Wer stänkert hier? War nicht meine Absicht. Erwarte nur, dass jemand, der auf diesem Niveau Code postet, diesen auch vorher laufen lässt. Was du auch jetzt anscheinend nicht gemacht hast... aber ich lasse mich gerne eines Besseren belehren.

sondern diskutieren
OK - hier können wir das ja machen. Ich zähle mal die Nachteile und Vorteile von doc.write auf, die innerHTML nicht hat. Du kannst die Liste ja gerne erweitern:

Vorteile
  • man kann damit <script>-Nodes erzeugen, die dann garantiert in der richtigen Reihenfolge ausgeführt werden

Nachteile
  • Hat unterschiedliches Verhalten, je nachdem ob das Script inline ist oder in einer externen Datei liegt
  • Beeinflusst den Parser beim Aufbau der Seite, was extrem unerwartete Nebeneffekte haben kann
  • Kann in der Praxis nach DOMContentLoaded nicht verwendet werden
  • Verlangsamt durch seine pure Existenz den Seitenaufbau und die Darstellung.

Deswegen fällt meine Empfehlung für Anfänger ganz eindeutig aus: Finger weg. Macht mehr Ärger als Nutzen. Und der einzige Anwendungsbereich, wo man es benutzen hat man als Anfänger nicht.

- - - Aktualisiert - - -

wo man 2 mal hinkucken muss
Warum sollte jemand Code schreiben wollen, wo man 2 mal hingucken muss, um einen Bug zu finden? Wenn ich doc.write nicht verwende, vermeide ich automatisch einige Bugs.
 
Das ist mir klar - aber bitte sage mir, was du bei dem write Beispiel als Ausgabe erwartest hast, als du es geschrieben hast.
worauf willst du hinaus?

gestern oder vorgestern - meine beiträge wurden ja verschoben - schrieb ich
"dass man mit document.write beim schreiben eines kommentars tatsächlich auskommentiert - wer hätte das erwartet"
dabei fiel mir ein, dass wenn du jetzt den context verlässt, um später bei einem erneuten kontextwechsel den kommentar zu schließen, das nicht möglich ist, da der kommentar das "tatsächlich auskommentiert"

Erwarte nur, dass jemand, der auf diesem Niveau Code postet, diesen auch vorher laufen lässt. Was du auch jetzt anscheinend nicht gemacht hast... aber ich lasse mich gerne eines Besseren belehren.
worauf willst du hinaus?

ich verstehe überhaupt nicht was du willst. gestern oder vorgestern, müsste so #10 gewesen sein, habe ich ein (angebliches) negativ-beispiel gebracht wo write und innerhtml etwas auskommentieren(warum auch immer das falsch sein soll).
du wolltest mir dann in #11 erzählen, dass ich innerhtml nur nicht richtig angewendet habe(merkste was?). wobei gerade dein beispiel zeigt, dass innerhtml hier ein anderes ergebniss liefert als eigentlich erwartet wird.
daraufhin habe ich in #12 geschrieben
"hätten sie wenigstens ein beispiel gebracht, wo es wirklich zu erst mal nicht erwarteten ergebnissen führt, wenn man nicht genauer drüber nachdenkt, aber auch hier wieder - in beiden fällen"
also das war als negativ-beispiel gedacht, diesmal als echtes, mit der einschränkung, echtes theoretisches - html-elemente mit kommentaren die durch js geschrieben werden auszukommentieren ist kein anwendungsfall der in der praxis auftaucht.
so, schluss mit "und dann hat der egon zu mir gesagt ... und dann habe ich gesagt ... und dann hat der egon wieder gesagt"

hier können wir das ja machen.
warum gerade hier? wir können das überall dort machen, wo es sich ergibt. bei selfhtml nennen sie das threaddrift und sind stolz darauf. dabei belächeln sie auch immer wieder gerne diverse bords vielleicht haben sie bei diesem board hier mittlerweile recht. schade drum, vor ein paar jahren war das anders und dieses forum noch richtig gut - was sich auch immer in der diskussionskultur widerspiegelt.

Hat unterschiedliches Verhalten, je nachdem ob das Script inline ist oder in einer externen Datei liegt
wo/wie/was? scripte werden sequenziell geladen, schreibe ich das write in ein script, welches ich über den scripttag lade, hat das dasselbe ergebniss, als würde ich das direkt in das scripttag schreiben.

Beeinflusst den Parser beim Aufbau der Seite
das ist der einzige sinn von write

Kann in der Praxis nach DOMContentLoaded nicht verwendet werden
ja, per design, wie soll das sonst gehen? write hat keinen context zur position wo geschrieben werden soll, weil es an die stelle schreibt, wo es im document steht, weil direkt in den parser input schreibt

Verlangsamt durch seine pure Existenz den Seitenaufbau und die Darstellung.
über geschwindigkeit von js müssen wir eigentlich nicht reden, aber ja, du hast einen kontextwechsel zu js, schreibst etwas in den parserinput und hast wieder einen kontextwechsel zurück zum parser. lass es 1 ms mehr sein, als wenn du es direkt ins html geschrieben hättest. aber auch hier wieder, das gleiche hast du bei innerhtml.

das waren aber alles keine nachteile, sondern die beschreibung von document.write.

Deswegen fällt meine Empfehlung für Anfänger ganz eindeutig aus: Finger weg. Macht mehr Ärger als Nutzen.
dann dürftest du eine menge nicht nutzen, weil du mit fast allem fehler machen kannst. und was viel wichtiger ist, es ist sowas von falsch einfach zu sagen "Finger weg. Macht mehr Ärger als Nutzen."!1elf dabei lernt man nichts. stur regeln befolgen ist ne feine sache für dumme leute, ein forum sollte aber wissen vermitteln.

Und der einzige Anwendungsbereich, wo man es benutzen hat man als Anfänger nicht.
nur als anfänger hat man überhaupt einen anwendungsbereich für write, später wird man feststellen, daß es für write keinen anwendungsbereich gibt. immer wenn man write nutzen kannst, hast du eigentlich einen designfehler in deiner software. das ist aber auch wieder kein grund write nicht zu verwenden, sondern den designfehler aufzudecken.
aber gerade als anfänger var x=1; var y=2; document.write(x+y); zu schreiben ist OK.

Warum sollte jemand Code schreiben wollen, wo man 2 mal hingucken muss, um einen Bug zu finden?
mal ehrlich, dir ist schon klar, dass das theoretische betrachtungen sind, die in der praxis nicht vorkommen. warum sollte jemand einen htmlkommentar mit write schreiben?

Wenn ich doc.write nicht verwende, vermeide ich automatisch einige Bugs.
welche? wie oft hast du bisher htmlkommentare mit js gesetzt?
 
dabei fiel mir ein, dass wenn du jetzt den context verlässt, um später bei einem erneuten kontextwechsel den kommentar zu schließen, das nicht möglich ist, da der kommentar das "tatsächlich auskommentiert"
Ok - wenn du dir das wirklich so gedacht hattest... dann hatte ich dich wohl falsch verstanden.

du wolltest mir dann in #11 erzählen, dass ich innerhtml nur nicht richtig angewendet habe
Das habe ich nicht geschrieben! Sondern
Du vergleichst hier zwei verschiedene Szenarien.


warum gerade hier?
Threaddrift ist ja schön und gut, falls der komplette Thread driftet. Zwei Diskussionen (eine über das eigentliche Thema und eine OT) in ein und dem selben Thread sind hier einfach nur unübersichtlich.

Und wir sind von der Software hald einfach ein "Board" und haben keine Baumstrukturansicht der Threads...

Pack' in deinem doc.write Beispiel die beiden <script>s in externe Dateien und du siehst, was ich meine.
Hatte ich ungünstig formuliert. Durch das doc.write macht es einen Unterschied, ob du deine Skripte inline machst oder nicht.

das waren aber alles keine nachteile, sondern die beschreibung von document. write.
Natürlich ist das eine Beschreibung von doc.write - aber in meinen Augen sind das Nachteile. Wenn du das anders sehen willst, ist das dein gutes Recht.

weil du mit fast allem fehler machen kannst
Wieder - das habe ich nicht gesagt, sondern dass es mehr Ärger macht als es Nutzen bringt. Und außerdem gibt es Alternativen, die weniger Ärger machen.

stur regeln befolgen ist ne feine sache für dumme leute, ein forum sollte aber wissen vermitteln.
Ja - es geht um das Wissen, dass doc.write keine gute Sache von JS ist... Und für Anfänger sind Regeln gut. Das hat nichts mit "dumm" zu tun!

daß es für write keinen anwendungsbereich gibt.
Äh - ja. Genau das ist mein Standpunkt. Was regst du dich dann so auf? Und worüber diskutieren wir dann hier eigentlich?

aber gerade als anfänger var x=1; var y=2; document. write(x+y); zu schreiben ist OK.
Warum solle es? Alert ist kürzer. Für Anfänger perfekt geeignet.

Bitte teile mir deinen genauen Standpunkt mit. Mir ist nicht klar, warum du dich eigentlich immer so aufregst, wenn jemand von doc.write abrät.
Du sagst ja selbst, dass man es nicht verwenden soll:
immer wenn man write nutzen kannst, hast du eigentlich einen designfehler in deiner software.

dir ist schon klar, dass das theoretische betrachtungen sind
Ja.

Z.B. das implizite document.open(). Oder auch andere HTML-Elemente wie <textarea>, <plaintext>, <select>, ...
 
Ich arbeite das mal über das we punkt für punkt ab, nachdem meine antwort wieder mal weg ist, weil ich mir zuviel zeit gelassen hatte

Ok - wenn du dir das wirklich so gedacht hattest... dann hatte ich dich wohl falsch verstanden.
ich wüsste nicht mal was ich sonst hätte zeigen sollen


Das habe ich nicht geschrieben! Sondern
Du vergleichst hier zwei verschiedene Szenarien.
gut dann so, ich habe gezeigt, dass du mit write und innerhatml beim einfügen von nicht geschlossenen kommentaren auskommentierst. 1 Szenario.

so, das ist jetzt schon der 3. punkt, aber ein wichtiger

Threaddrift ist ja schön und gut, falls der komplette Thread driftet. Zwei Diskussionen (eine über das eigentliche Thema und eine OT) in ein und dem selben Thread sind hier einfach nur unübersichtlich.

Und wir sind von der Software hald einfach ein "Board" und haben keine Baumstrukturansicht der Threads...

das sehe ich nicht so, und auch bei selfhtml wird eingesehen, dass du durch zitate genau diese übersichlichkeit bekommst, nur sind die erfahrungen der selfhtmler so, dass die zitatfunktion nicht genutzt wird (findest du dort immer wieder). ein wichtiger punkt gegen den baum finde ich, ist der punkt, dass es eigentlich scheißegal ist, ob egon bernd antwortet, oder olaf der uschi es kommt auf den inhalt an, und den kann man durch zitate vortrefflich hervorheben. auch die reihenfolge der postings ist in einem baum nicht mehr (bzw. schwer) ersichtlich.
sonst landest du hier. und dort möchte ich nicht mehr posten. ich schreibe doch nicht in einem board mit dem ziel irgendeinem hansel, der zu doof oder zu faul zum selberdenken ist, eine lösung zu präsentieren. das ziel sollte doch die diskussion sein, um vielleicht selbst noch was zu lernen, was aufzuschnappen, ne andere perspektive/herangehensweise kennenzulernen und im besten fall lernt der fragesteller auch was.

- - - Aktualisiert - - -

übrigens hier ein lichtblick im dunkel, er hat eine lösung gefunden auf stackoverflow, aber er will sie verstehen!!!!!
 
Pack' in deinem doc.write Beispiel die beiden <script>s in externe Dateien und du siehst, was ich meine.
Hatte ich ungünstig formuliert. Durch das doc.write macht es einen Unterschied, ob du deine Skripte inline machst oder nicht.
das hat nichts mit write zu tun


Wieder - das habe ich nicht gesagt, sondern dass es mehr Ärger macht als es Nutzen bringt. Und außerdem gibt es Alternativen, die weniger Ärger machen.
was hast du nicht gesagt? dass du mit allem fehler machen kannst? das hab ich gesagt

Ja - es geht um das Wissen, dass doc.write keine gute Sache von JS ist...
write ist aber weder eine gute, noch eine schlechte sache, sondern eine funktion, die in dem ihr zugedachten context genau das macht, was sie soll - wie jede andere funktion auch

Und für Anfänger sind Regeln gut.
nein, dann bleiben sie für immer anfänger

Äh - ja. Genau das ist mein Standpunkt. Was regst du dich dann so auf? Und worüber diskutieren wir dann hier eigentlich?
nein, dein standpunkt ist es jedem der write nutzt, die regel an den kopf zu knallen, dass er es nicht nutzen soll

warum sollte es nicht? es liefert genau das ergebniss, was der anwender erwartet.

Alert ist kürzer.
und nervt, weil man jedesmal bestätigen muss. aber ja, alert kann er genausogut nehmen, alert unterbricht zwar die codeverarbeitung und hat damit auch nebeneffekte, auch wirst du alert später nicht mehr verwenden, also kein unterschied zu write

Bitte teile mir deinen genauen Standpunkt mit. Mir ist nicht klar, warum du dich eigentlich immer so aufregst, wenn jemand von doc.write abrät.
weil es dafür keinen grund gibt, und die gründe die du aufführst an den stellen, wo du ihnen deine regel vor die füsse schmeisst, nicht ziehen. sollten sie denen rat beherzigen setzen sie stur eine regel um ohne zu wissen warum.

Du sagst ja selbst, dass man es nicht verwenden soll:
nein du sagst: Regel 17: verwende nie write.
ich sage: lass sie write verwenden, irgendwann merken sie selber, dass sie es nicht mehr nutzen können und wissen wieso. verwenden sie write an einer stelle, wo es nicht verwendet werden kann (das wird immer im eventhandler sein, alle anderen szenarien sind an den haaren herbeigezogen) erkläre, warum es an DIESER stelle nicht verwendet werden kann.
daran, dass dieses problem hier aber max. 1 mal im jahr hier auftaucht, siehst du aber schon, dass die leute intelligent genug sind das auch selber rauszufinden und somit auch wissen was sie da warum machen.
 
Zurück
Oben