Was ist los mit dem DOM? Abgesehen von der von Java inspirierten Syntax (die Crockford angesprochen hat), nichts.
Was "falsch" ist, gilt teilweise für Browser-Anbieter. Was "falsch" ist, gilt für Entwickler. Was "falsch" ist, gilt für Unwissenheit.
Also, wo soll ich anfangen?
In den Kaninchenbau…
Browser-Anbieter
Zuallererst haben Browser-Anbieter über Jahrzehnte im Wettbewerb darum gekämpft, die "besten", "schnellsten", "einfachsten" usw. zu sein. Im ersten Jahrzehnt (199x-2000) hat Microsoft die Nase vorn. Der Internet Explorer stellte innovative Ideen vor, wie zum Beispiel:
- Offenlegen der HTML-Parsing-Engine des Browsers als
innerHTML
und
outerHTML
;
- einfache textuelle Manipulation mit
innerText
und outerText
;
- ein Ereignismodell (
*tachEvent
), das der Entwurf für DOM Level 2-Ereignisse ( *EventListener
) war.
Jeder hat (zum Guten und zum Schlechten) erheblich zum heutigen Webentwicklungsstapel beigetragen. Opera ging sogar so weit, alle drei in Version 7 (2003) zu implementieren.
Netscape hatte jedoch ein eigenes DOM-Ereignismodell ( *EventListener
). Im Jahr 2000 wurde es die DOM Level 2 Events-Spezifikation. Safari 1 (2003) hat dieses Modell implementiert. Opera 7 (2003) hat dieses Modell ebenfalls implementiert. Als die Ruinen von Netscape zu Mozilla wurden, übernahm Firefox 1 (2004) das Modell.
Für den ersten Abschnitt des zweiten Jahrzehnts (2000-2004) regierte Microsoft an oberster Stelle. Der Internet Explorer 6 (2001) war zu dieser Zeit mit Abstand der beste Browser. Einer seiner Konkurrenten, Opera 6 (2001), hatte den DOM Level 1 Core ( createElement
ua ) noch nicht implementiert . Microsoft implementierte ihn in Internet Explorer 4 (1997), bevor die Spezifikation sogar zu einer Empfehlung wurde (1998).
Der zweite Abschnitt des zweiten Jahrzehnts (2004–2010) würde sich für Microsoft jedoch als katastrophal herausstellen. Im Jahr 2003 veröffentlichte Apple Safari 1.0; Im Jahr 2004 beendete Mozilla Firefox 1.0. Microsoft schien auf seinem Thron auf dem Browserberg zu schlafen. Internet Explorer 7 wurde erst 2006 veröffentlicht: eine Lücke von fünf Jahren, die auf das Veröffentlichungsdatum von Internet Explorer 6 zurückgeht. Im Gegensatz zu den Internet Explorer-Versionen 4 bis 6 wurde in Version 7 nur eine geringe Innovation erzielt. DOM-Änderungen waren winzig. Fast zweieinhalb Jahre später wurde Internet Explorer 8 veröffentlicht. Microsoft war aus seinem Schlaf erwacht und bemerkte die Verschmelzung, die andere Browser-Anbieter um zahlreiche Webstandards gebildet hatten. Leider war seit der letzten echten Innovation von Microsoft zu viel Zeit vergangen. Unter den Browserverkäufern war eine Bewegung entstanden. Dem W3C sollten neue DOM-Funktionen in Form von Spezifikationen hinzugefügt werden. Die Ideen von Microsoft sind in der Vergangenheit geblieben. Microsofts Eventmodell (*tachEvent
) wurde für das DOM Level 2-Ereignismodell vermieden. Internet Explorer hat das Vorgängermodell erst in Version 9 (2011) implementiert, die zum DOM Level 3-Ereignismodell wurde.
Die Follies von Microsoft (DOM) lassen sich wie folgt zusammenfassen:
Präsenz als Kernfunktion von Windows und die daraus resultierenden Sicherheitsanforderungen auf Betriebssystemebene;
Vertrauen auf ActiveX für clientseitigen Code;
Innovation, die nach Version 6 (2001) merkwürdig nachließ.
(Web-Entwickler
Zweitens tragen die Entwickler eine gewisse Schuld. Da das Web weiter auf dem Vormarsch ist, "tüfteln" immer mehr Leute an der Webentwicklung. Dies hatte zu einer Verwässerung des Talents und der Arbeitsmoral geführt. Das Problem liegt jedoch hauptsächlich in der Einstellung. "Schnell erledigen" hat Vorrang vor "Richtig erledigen". Infolgedessen sind unzählige Webseiten nicht mit verschiedenen Browsern kompatibel. Eine der Hauptursachen für diese Inkompatibilität ist das sogenannte "User Agent Sniffing". Obwohl die Praxis heute noch in Gebrauch ist, hat sich herausgestellt, dass sie sowohl fehlerhaft als auch schädlich ist. Opera ging sogar so weit, die User-Agent-Version bei "9.80" in Version 10 (2009) und höher "einzufrieren". Dies sollte verhindern, dass fehlerhafte Skripte beschädigt werden. Eine viel bessere Praxis namens "
Ignoranz
Drittens ist Unwissenheit mein bevorzugter Grund für die Schuld. Unwissenheit in der Tatsache, dass Browser-Anbieter nicht annähernd genug zusammengearbeitet haben, um einheitliche Spezifikationen zu erstellen; Unwissenheit darüber, dass Microsoft Benutzer anderer Browser gemieden hat; Ignoranz in der Tatsache, dass Entwickler entweder zu faul oder zu kurzsichtig sind, um Browser zu durchsuchen (insbesondere solche, die nicht aktuell sind ). Es gibt viele Unterschiede bei APIs und Implementierungen. Die meisten können mit einem vereinfachten und dennoch defensiven Ansatz (basierend auf DOM 0) vermieden werden, zusammen mit zahlreichen Forschungs- und Testarbeiten. Unwissenheit hat zu der Annahme geführt, dass Internet Explorer 6 eine Seuche auf der Erde ist (erinnern Sie sich an die Stelle auf dem bereits erwähnten Browserthron).
Reflexion
Leider ist das DOM nur eine missverstandene API. Viele wollen Steine werfen (über FUD), aber nur wenige möchten ihre Feinheiten lernen. Ein Ergebnis dieser Ignoranz ist die Einführung von DOM- "Selektoren". Das Herzstück des DOM ist eine API zum Bearbeiten von Dokumentbäumen. Tree Traversal sollte für komplexe Probleme in Form eines analysierten Dokuments verwendet werden. Mit der Einführung der DOM Selectors API kann ein Entwickler nun die CSS-Traversal-Engine des Browsers nutzen. Dies ist recht praktisch, verbirgt jedoch die wahre Form eines Dokumentenbaums. Mit "Selektoren" ist das Abrufen von Elementknoten elementar. Im DOM sind jedoch elf andere Knotentypen angegeben. Was ist mit Textknoten? Kommentarknoten? Dokumentknoten? Dies sind auch Knoten, die häufig während der Interaktion mit dem DOM gewünscht werden.
Fazit
Kurz gesagt, nehmen Sie sich Zeit und lesen Sie die verschiedenen DOM-Spezifikationen. Testen Sie den Code in so vielen Browsern wie möglich. Wenden Sie sich an MSDN, wenn sich Internet Explorer merkwürdig verhält. Am häufigsten wird das Verhalten dokumentiert.
(Historische Anekdoten können und können ungenau sein; Ungenauigkeiten können gerne zur Sprache gebracht werden.)
- Matt
Apart from cross-browser inconsistencies
Ist das nicht genug