Czerny: JavaScript mit CDATA in XHTML einbinden

Hallo zusammen,

wie binde ich denn jetzt eigentlich JavaScript bzw. CSS korrekt als CDATA-Abschnitt in XHTML 1.0 Strict bzw. XHTML 1.1 ein?

Ein Browser, der XHTML 1.1 als "application/xhtml+xml" ausgeben kann, sollte doch die CDATA-Tags auch ohne Kommentar-Zeichen interpretieren können. 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.

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? Es gibt ja zwei Methoden:

// <![CDATA[  
// ...  
// ]]>
/* <![CDATA[ */  
// ...  
/* ]]> */

Ist denn nun der einzeilige Kommentar oder der mehrzeilige Kommentar die bessere Lösung und aus welchem Grund?

Vielen Dank!

  1. Hallo,

    wie binde ich denn jetzt eigentlich JavaScript bzw. CSS korrekt als CDATA-Abschnitt in XHTML 1.0 Strict bzw. XHTML 1.1 ein?

    In dem du die Daten in einer externen Datei auslagerst.

    dann funktioniert z.B. document.write() überhaupt nicht.

    Das Verwenden von document.write ist in XHTML verboten.

    Ist denn nun der einzeilige Kommentar oder der mehrzeilige Kommentar die bessere Lösung und aus welchem Grund?

    Das eine nimmt dem anderen nichts. Idealerweise referenzerst du eine Skriptdatei und verzichtest auf das direkte einbinden von JavaScript.

    Gruß, Tom

    1. Hallo TomD!

      Das Verwenden von document.write ist in XHTML verboten.

      Zur Ergänzung: http://forum.de.selfhtml.org/archiv/2006/3/t125866/#m811800

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --
      _ - jenseits vom delirium - _

         Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
  2. 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

    1. @@PI:

      nuqneH

      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.

      document.body nicht nutzbar?? Bist du sicher?

      cf. http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-62018039

      Qapla'

      --
      Volumen einer Pizza mit Radius z und Dicke a: pi z z a