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