Was gehört zu welchem Standard?
Adi K.
- zur info
Hallo zusammen!
Es viele Spezifikationen von W3C, die alle fürs WWW gedacht sind. Ich beschäftige mich nun etwas tiefer mit JavaScript und stosse dabei etwas an meine Verständnisgrenzen. Ich möchte gerne wissen, zu welchem W3C-Standard alle "root"-Objekte gehören, die man in JavaScript ansprechen kann. Zum Beispiel:
----
window
navigator
----
Und auch die Methoden:
----
window.getSelection() -> HTML 5 ?
document.getSelection()
----
Vielen Dank schon im Voraus!
Gruss
Adi
Hallo,
Es viele Spezifikationen von W3C, die alle fürs WWW gedacht sind. Ich beschäftige mich nun etwas tiefer mit JavaScript und stosse dabei etwas an meine Verständnisgrenzen. Ich möchte gerne wissen, zu welchem W3C-Standard alle "root"-Objekte gehören, die man in JavaScript ansprechen kann.
Vieles im Konzept JavaScript ist einfach gewachsen, ehe es spezifiziert wurde; vieles ist auch noch nicht spezifiziert. Molily hat für das Weblog mal den einführenden Artikel Javascript und Webstandards geschrieben, der das teilweise beschreibt.
ECMAScript ist die (sehr, sehr) formale Sprachgrundlage von Javascript und stellt diverse eingebaute, native Objekte wie Array, Math, etc. bereit. Effektiv wurde das damals rückwärts spezifiziert, es wurde sehr formal aufgeschrieben, was Netscape Navigator konnte und auf Ansinnen von Microsoft wurden auch manche Fehler beibehalten, die Microsoft bei ihrer Kopie von Netscapes JS-Variante kopiert hatte, obwohl Netscape die ausbügeln wollte. ECMAScript ist aber eine Metasprache, mit der man konkrete Javascript-Umgebungen oder andere Programmiersprachenumgebungen wie das für Flash verwendete Action Script. Deshalb finden sich browser- oder gar webspezifische Dinge nicht in ECMAScript, es bezieht sich nur auf den Aspekt des Programmierens.
Gleichzeitig begann im W3C in den spten 90ern damit, mit dem Document Object Model (DOM) damit, eine Spezifikation zu entwickeln, um HTML/SGML Dokumente in objektorientierten Programmiersprachen mit den gleichen Objekten, Attributen und Methoden, sprich Datenstrukturen abbilden und verarbeiten zu können. Das tut das in der Form von abstrakten Interfaces, d.h. Sammlungen von Attributen und Methoden, die ein Objekt implementieren muss. Das ganze sollte also programmiersprachenunabhängig sein.
Hier sind die diversen DOM-Standards. Es begann mit DOM Level 1, das dann durch die unterschiedlichen DOM Level 2 Spezifikationen überschrieben wurden, von denen manche durch die DOM Level 3 Spezifikationen aktualisiert wurden. DOM Level 1 fasste noch den abstrakten Zugriff auf ein SGML- oder XML-Dokument und HTML-spezifisches zusammen. Mit Level 2 wurde dass dann weiter auseinander gerupft. DOM 2 Core für SGML/XML-Dokumente, DOM 2 HTML für HTML-spezifisches und das Andere für Anderes. Für das heutige Web mit dessen Unterstützung in den Browsern sind vermutlich DOM 3 Core, DOM 2 HTML und DOM 2 Events am entscheidensten; das andere lauert wegen mangelnder browserübergreifender Unterstützung noch etwas im Bereich von rocket science.
Aber: DOM bezieht sich nur auf Dokumente, d.h. den Inhalt der JS-Umgebung innerhalb von window.document. Zum einen ist es nicht vollständig, es gab noch das umgangssprachlich so genannte DOM Level 0 - nicht spezifiziertes, eventuell nur in manchen Browsern vorhandenes. Zum anderen fehlte der ganze Bereich des Browsers wie window, window.navigator, window.history. DOM bezieht sich eben nur auf Dokumente.
Zurecht kamen die diversen Browserhersteller in den letzten Jahren dadurch, dass die die Dokumentation von Netscape und Microsoft lasen und kopierten. Kein Standard, aber das Verbindlichste, was nun mal da war.
...
Mit der Gründung der WHAT WG und dem Beginn von HTML 5 kam dann die Entscheidung ganz HTML a) zu erweitern und b) erstmal das Vorhandene erstmals formell zu dokumentieren, durch Lesen der Dokumentation der Hersteller und durch eigene Tests. Und durch die Entscheidung der Dokumentation von HTML 5 in der Ausdrucksweise von DOM (Sozusagen der Nachfolger von DOM 2 HTML) kam dann auch das Augenmerk auf die vernachlässigten Teile der Browser-Umgebung. Das meiste davon findet man in Abschnitt 4 Web Browsers von HTML 5; allerdings vieles damit auch erweitert mit Neuerfindungen.
Manches von diesem deskriptiven Spezifizieren wurde dann vor etwas mehr als einem Jahr aus HTML 5 ausgelagert (weil klein und abgeschlossen) und an zwei neugegründete W3C Arbeitsgruppen (Web Application Formats & (wichtiger) Web API »übergeben«, um dort schnell weiterentwickelt zu werden, wie z.B. das ursprünglich von Microsoft entwickelte XMLHttpRequest und eben auch das entscheidende, globale Window-Objekt, wobei letzteres auch nicht vollständig ist.
Nur: Alles seit »...« ist noch unvollständig und wird weitergeschrieben oder ist gerade im Hiatus - aber noch nicht abgeschlossen und verblackboxt. Es ist eine immer noch anlaufende Entwicklung. Und manchmal kann man sich auch nicht drauf verlassen. Es ist nur das Beste, was wir derzeit haben.
...
Zum Beispiel [..]
window
Keine beendete Spezifikation; das Beste, was wir derzeit haben ist zum einen der Entwurf von Window Object 1.0, aber der Working Draft braucht einen neuen Editor. Zum anderen ist es der Entwurf in HTML 5.
navigator
Keine Spezifikation, das Beste, was wir derzeit haben ist die Dokumentation im Mozilla Developer Center. In HTML 5 isses etwas .. nun ja. Leer.
window.getSelection() -> HTML 5 ?
document.getSelection()
Ja, die Beschreibung in HTML 5 ist das Beste, was wir derzeit haben.
Tim
Hallo Tim
Herzlichen Dank für deinen sehr ausführlichen Artikel! Er hat mir geholfen, die aktuelle Lage zu verstehen und es erstaunt mich nun, was es alles noch zu spezifizieren gilt.
Ich habe mich eben kürzlich in JavaScript weiterbilden wollen und in diversen Quellen nachgeschaut, welche Variante denn nun die "offizielle" ist. Dabei bin ich plötzlich auf HTML 5 gestossen. Ich habe die Spezifikation mal überflogen und denke, so nach dem ersten Blick, dass dies wieder ein grosser Schritt in Sachen Webstandards ist. Ich freue mich schon jetzt darauf, wenn die Spec. fertig ist UND die Browser diese auch RICHTIG unterstützen!
Liebe Grüsse
Adi