Hi,
Ein Browser, der XHTML 1.1 als "application/xhtml+xml" ausgeben kann, sollte doch die CDATA-Tags auch ohne Kommentar-Zeichen interpretieren können.
Richtig.
Die Kommentare drumherum macht man für den Fall, dass man XHTML als text/html ausliefert.
Wenn das Dokument als HTML verarbeitet wird, dann erkennt der Parser <![CDATA[ und ]]> nicht als CDATA-Section. Und gibt sie daher direkt an den JavaScript-Interpreter weiter. Der weiß allerdings nichts damit anzufangen und sieht sie als Syntaxfehler. Daher muss man sie auskommentieren, wenn man das XHTML-Dokument als text/html ausliefern will. - Und das machen üblicherweise 99% der Websites mit ihren XHTML-Dokumenten.
Wenn du das Dokument nur als application/xhtml+xml auslieferst, dann brauchst du keine solche Auskommentierung.
Das funktioniert bei mir innerhalb des <head>-Abschnitts auch wunderbar, wenn ich allerdings JavaScript im <body> einbinde, ohne die CDATA-Tags zu kommentieren, dann funktioniert z.B. document.write() überhaupt nicht.
Wie gesagt, wenn du das Dokument als text/html auslieferst und die CDATA-Anweisungen nicht auskommentierst, wird es einen JavaScript-Syntaxfehler geben. (Siehe die JavaScript-Konsole des Browsers.)
Des weiteren funktioniert document.write per definitionem nicht, wenn du den MIME-Typ application/xhtml+xml oder application/xml verwendest. Es funktioniert nur in HTML-Dokumenten und bei XHTML-als-HTML. (Auch hier müsstest du eine Fehlermeldug auf der JavaScript-Konsole finden.)
Eine Frage die ich außerdem schon lange mal plausibel beantwortet haben möchte, ist die, auf welche Methode man die CDATA-Tags denn nun eigentlich absolut korrekt kommentiert?
Beide sind korrekt.
Auch das Weglassen von jeglichen Kommentaren ist korrekt - unter der Voraussetzung, dass dein Dokument als application/xhtml+xml ausgeliefert wird und der Browser das unterstützt.
Höchstwahrscheinlich willst du nicht application/xhtml+xml nutzen, sondern HTML-kompatibles XHTML als text/html. Denn „echtes“ XHTML hat einige Nachteile. Eine davon ist, dass verschiedene JavaScript-Objekte aus dem HTML-DOM wie document.body und document.write nicht nutzbar sind. Eine andere ist, dass das Dokument nicht im Internet Explorer angezeigt werden kann (wenn du dem nicht das Dokument als text/html lieferst).
MfG, PI