molily: "<!-- ... //-->" gängige Praxis - immer noch?

Beitrag lesen

Ich glaube, da war cross mit „Da nun aber einige ältere Browser diesen Tag ["<![CDATA[" und "]]>"] nicht verstehen (und Javascript-Fehler werfen) wird es für sie einfach auskommentiert“ näher dran.

Nein, das hat mit älteren Browsern überhaupt nichts zu tun!

Auch neuere Browser tun dies, wenn sie Tag-Soup parsen. Aber auch nur dann.

Man muss CDATA nicht verstecken, weil es ältere Browser gibt, sondern weil man XHTML als text/html (sogenanntes HTML-kompatibles XHTML) ausliefert.

... weil ansonsten in diesem Fall ...

der Inhalt des 'script[@type="text/javascript]'-Elements als JavaScript interpretiert wird

Habe ich etwas anderes behauptet? Ich denke nicht, dass sich diese Aussagen widersprechen, sondern vielmehr ergänzen.

Meine Aussage war: In XHTML muss man dies *nur dann* tun, wenn man das XHTML nicht als XML verarbeiten lässt.
Warum? Weil dann Tag-Soup-Regeln gelten und der Parser das CDATA nicht als solches erkennt. <![CDATA[ und ]]> werden daher als ganz normale Zeichendaten erkannt, im Dokument belassen, als Teil des script-Elementinhaltes gewertet und schließlich an den JavaScript-Parser übergeben.

Das hatte cross einfach durcheinander gebracht: Mit alten Browsern hat das nichts zu tun.

Wenn das Dokument nämlich als XML geparst wird, wie es bei XHTML eigentlich vorgesehen ist, dann bekommt der JavaScript-Interpreter von dem CDATA überhaupt nichts mit. Das ist ja Sinn von CDATA, die Anwendung, an die das geparste Dokument durchgegeben wird, hat sich weder für CDATA-Abschnitte noch für Entities oder Zeichenreferenzen zu interessieren.

Wenn die JavaScript-Engines einiger Browser bei nicht auskommentierten "<![CDATA[" und "]]>" keinen Fehler werfen, dann ist das deren Fehlertoleranz zu verdanken.

Es gibt m.W. keinen Browser, der keine Fehlermeldung wirft.

Allerdings finde ich das in keiner JavaScript-Spec festgeschrieben

Ist es auch nicht. Die Aussage im HTML-Standard beschreibt bloß den Usus.

Mathias