document.write Ersatz

07/08/2014 - 18:57 von Hermann Riemann | Report spam
Ich habe gelesen, dass document.write nicht mehr verwendet werden soll.

Für meine Seiten gilt:
Wenn javascript deaktiviert ist, soll im <body> bei <script>
kein Text erscheinen, daher den Weg über ein *.js Datei.

Beispiel:

Zeile im <body> Teil einer html Hatei:
<script src="body.js" language="javascript"></script>

Momentane Zeile in body.js:

document.write('<tr><td class=l>screen.width</td><td class=r>'
+screen.width);document.writeln('</td></tr>');

Im internet und meinen Büchern
habe ich dazu bis auf den Hinweis der
Nicht-mehr-Benutzung ab html5 nichts gefunden.

Hermann
der seine homepage Seiten ohne hohen Aufwand
auf aktuellen Stand bringen möchte.

http://www.Hermann-Riemann.de
 

Lesen sie die antworten

#1 Thomas PointedEars Lahn
07/08/2014 - 22:11 | Warnen spam
Hermann Riemann wrote:

Ich habe gelesen, dass document.write nicht mehr verwendet werden soll.



Alle pauschalen Aussagen sind fhcsal.

Für meine Seiten gilt:
Wenn javascript deaktiviert ist, soll im <body> bei <script>
kein Text erscheinen, daher den Weg über ein *.js Datei.



Kein einigermassen brauchbarer Browser bzw. keine einigermassen brauchbare
Layout-Engine wird den Inhalt des SCRIPT/script-Elements anzeigen. Die
Empfehlung, auf die Du Dich anscheinend beziehst, stammt aus der Zeit vor
HTML 3.2 (1997) – dieses hatte das SCRIPT-Element eingeführt [1]. Wenn Dir
der W3C-Validator nur wegen des Inhalts des SCRIPT/script-Elements einen
Fehler anzeigt, dann entspricht der Inhalt des Elements nicht den (X)HTML-
Syntaxregeln, d. h. meist wurden spezielle Markup-Begrenzer nicht (korrekt)
escaped.

Eine Skript-Ressource hat möglicherweise den Vorteil besseren Syntax-
Highlightings, ausserdem können mehrere Skript-Ressourcen zusammengefasst
werden. Sie hat den Nachteil, dass dafür ein zusàtzlicher HTTP-Request
erforderlich ist. Hier gilt es also abzuwàgen.

Beispiel:

Zeile im <body> Teil einer html Hatei:
<script src="body.js" language="javascript"></script>



Das language-Attribut des SCRIPT/script-Elements ist seit 15 Jahren (HTML 4)
deprecated (missbilligt) [2] und seit mindestens 5 Jahren (XHTML 1.0 Strict,
HTML5 WD/CR) ungültig [3][4]. Hingegen ist das type-Attribut des script-
Elements seit 14 Jahren erforderlich und seit mindestens 5 Jahren optional
(dito).

<http://validator.w3.org/>

Momentane Zeile in body.js:

document.write('<tr><td class=l>screen.width</td><td class=r>'
+screen.width);document.writeln('</td></tr>');



Wenn das die einzige Zeile in dieser Datei ist, dann ist *diese* Verwendung
von document.write() mit Sicherheit fcshasl. Denn es fehlt die Tabelle zur
Tabellenzeile und Elemente sollten auf einmal generiert werden (vom Start-
Tag bis zu einschliesslich dem End-Tag). Mindestens also

document.write('<table><tr><td class=l>screen.width</td><td class=r>'
+ screen.width + '</td></tr></table>');

Allerdings sind eine Tabelle bestehend aus einer Zeile und eine Skript-
Ressource, die ein oder zwei triviale Anweisungen enthàlt, nicht sinnvoll.

Abgesehen davon: <http://blog.selfhtml.org/2006/04/07...wport/>
(alt, aber gut; nicht nur wegen des enthaltenen Zitats)

Es kann sinnvoll sein, diese Information anzuzeigen (ich mach das aufgrund
des speziellen Designs und als als PoC auf meiner Website); frag Dich aber
bitte, ob es in *Deinem* Fall wirklich sinnvoll und nötig ist.

Im internet und meinen Büchern
habe ich dazu bis auf den Hinweis der
Nicht-mehr-Benutzung ab html5 nichts gefunden.



Das hat nichts mit HTML5 zu tun. Wenn Deine Recherche das ergeben hat, sind
entweder Deine Quellen höchst unzuverlàssig oder Du hast etwas föllig vlacsh
verstanden. Beides wàre nicht erstaunlich. (Im Web steht gefühlt zu 90%
Mist, Tendenz steigend.)

Es hat etwas damit zu tun, dass bei so generierten Inhalten es nicht möglich
ist, das Rendern fortzusetzen, solange die Script-Engine nicht aufgerufen
wurde und die Inhalte nicht generiert wurden. Das bremst das Laden des
Dokuments aus. [5] Dennoch kann es sinnvoll sein, document.write()
einzusetzen, zumindest als Fallback für Element::appendChild(); ich mach'
das bei der ECMAScript Support Matrix (siehe Signatur), um möglichst
unabhàngig von DOM-Features die Testergebnisse anzuzeigen.

Oft wird hier fàlschlicherweise mit Standardkonformitàt argumentiert; es
wird dann angenommen, dass document.write() nicht zum DOM-Standard gehöre,
weil es schon funktionierte, bevor es eine W3C-DOM-Spezifikation gab. Diese
Annahme ist jedoch fhcsal: es wurde in W3C DOM Level 2 HTML standardisiert
[6] und wird auch im kommenden HTML5-Standard enthalten sein [7].

Um Dir einen Rat geben zu können, ob und wie Du document.write() ersetzen
solltest, musst Du schreiben, was *genau* Du machen willst. Siehe auch
<http://dcljs.de/> und <http://www.tty1.net/smart-questions_de.html>.

_________
[1] <http://www.w3.org/TR/REC-html32#script>
[2] <http://www.w3.org/TR/1999/REC-html4...SCRIPT>
[3] <http://www.w3.org/TR/xhtml1/dtds.ht...Strict>
[4] <http://www.w3.org/TR/2014/CR-html5-...lement>
[5] <http://www.stevesouders.com/blog/20...ripts/>
[6] <http://www.w3.org/TR/2003/REC-DOM-L...809268>
[7] <http://www.w3.org/TR/2014/CR-html5-...ertion>
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Ähnliche fragen