Hallo,
ich habe mich schon unten über die mangelnde Standardkonformität hinsichtlich neuer »JavaScript«-Techniken ausgelassen. Als ziemlichen Hohn empfinde ich die neueste Nachricht, dass die Gecko-Entwickler die JavaScript-1.5-Spezifikation von Netscape aus dem Jahr 2000 modifiziert haben. Diese Spezifikation war meines Wissens vor allem eine Anpassung der Javascript-Produktlinie an die dritte Ausgabe des ECMAScript-Standards von Dezember 1999. Schon direkt darauf hatte Netscape begonnen, an einer vierten Ausgabe zu arbeiten, aus der bis heute nichts geworden ist.
Auf jeden Fall wurden jetzt einige Methoden zum Array-Prototyp hinzugefügt. Man kann sich darüber streiten, ob die Methoden praktisch und nützlich sind, vor allem aber sind sie proprietär und haben damit nur wenige Perspektiven. Entweder sie werden von anderen Browsern übernommen, wobei KHTML und Opera in Frage kommen, womit ECMAScript als Standardisierung des JavaScript-Kerns ausgedient hat. Die Mozilla Foundation schreibt ihre eigenen proprietären Spezifikationen und lässt ECMAScript hinter sich. Oder Gecko bleibt der einzige Browser, der die Methoden kann. Das hieße, man könnte sie im WWW nutzen, müsste aber alternativ immer noch eine eigene Implementierung schreiben, damit andere Browser die Methoden ebenfalls kennen. Unter dem Strich also bringt der Welt diese Vorgehensweise wenig und bedeutet ein weiterer Abstieg in die finstere Zeit des if document.getElementById) else if (document.all) else if (document.layers).
Microsoft wird seit Ewigkeiten gerne für die proprietären Teile von JScript gescholten, aber in letzter Zeit war es aber vor allem Gecko, der durch »Eigenerfindungen« auf sich aufmerksam machte. Dabei ging es vor allem um das Gleichziehen mit dem MSIE in puncto XML (das angesprochene XMLHttpRequest, DOMParser, XMLSerializer sowie XSLTProcessor, SchemaLoader usw.) Das ist schade, weil vor allem bei bei grundlegenden Techniken wie DOMParser und XMLSerializer ein existierender DOM-Standard außer Acht gelassen wird. Gecko will verständlicherweise eine Software sein, die in Intranets stark im Zusammenhang mit XML verwendet werden kann. Dazu war das Aufholen zweifellos notwendig. Aber dass man dabei ein weiteres document.layers in Antwort auf ein weiteres document.all von Microsoft erschaffen hat, scheint keinen zu beunruhigen. »Teufelskreis, Wettrüsten, Übertrumpfen, ja gerne! Es gibt schon eine proprietäre Syntax? Wir erfinden eine zweite für haargenau dieselbe Aufgabe!«, müssen sich die Gecko-Entwickler gedacht haben.
Heutige Scripte sind ein wilder Mix aus Techniken verschiedener Herkunft:
- nicht standardisierte, nur durch Netscape spezifizierte Sprachbestandteile (z.B. window, document, Event-Handling, Fenster- und Frameszugriff), die heute allgemein als JavaScript bezeichnet werden
- standardisierte ECMAScript-Techniken
- standardisierte DOM-Techniken (DOM Core, DOM HTML, DOM Events, DOM Style)
- sonstige proprietäre, aber verbreitete Techniken (innerHTML, offset*, scrollIntoView, Event-Handling usw.)
Das Zusammenspiel dieser Techniken, also die Punkte, an denen sie als Zahnräder ineinander greifen, sind zum Teil vollkommen willkürlich. Was allgemein als standardkonforme Programmierung bezeichnet wird, ist höchstens eine Mischung aus wenig echten Standards und unzähligen Quasi-Standards.
Letztlich zeigen sowohl Microsoft als auch die Mozilla Foundation in vielen Punkten Desinteresse, hier Ordnung hineinzubringen - der Fall XMLHttpRequest, DOMParser, XMLSerializer versus DOM 3 Load and Save ist ein Musterbeispiel. Mit der heimlichen Fortentwicklung der proprietären Netscape-JavaScript-Spezifikation, ohne formal eine neue Version 1.6 auszurufen, haben die Gecko-Entwickler ein weiteres Mal gezeigt, dass ihnen trotz aller Fortschritte an manchen Stellen wenig an demokratischer Entwicklung von offenen WWW-Techniken liegt. Ich bezweifle nicht, dass es beeindruckend ist, wieviele neue Standards Gecko implementiert. Aber solche irrationalen Alleingänge sind schäbige Flecken, die auf einer weißen Weste besonders ins Auge stechen.
Mathias
--
zur Frage, was JavaScript ist, siehe auch
hier und
dort