Beautiful interfaces& solid&smart backends make todays web work.

About Maik Vlcek Follow me on twitter
Themenschwerpunkte dieses Blogs:

Javascript mit CDATA korrekt in XHTML einbinden

Share and Enjoy: Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • Digg

In dem Artikel Javascript and XHTML beschreibt Stephen Chapman moderne Möglichkeiten, inline-Javascript korrekt einzubinden. Hier eine kurze Zusammenfassung seines Artikels.

Er fängt beim modernsten und eben auch korrekten Weg an, Javascript in XHTML Dokumenten als CDATA einzubinden:

<script type="text/javascript">
<![CDATA[
  //content of your Javascript goes here
]]>
</script>

Dem Validator wird mitgeteilt, dass es sich im CDATA-Tag um Text (Character Data) handelt welcher nicht als XHTML anzusehen ist. Laut DTD wird ohne diese Angabe nämlich standardmäßig PCData angewandt, was für Parsed Character Data steht. Der Nachteil von PCDATA besteht nun darin, dass XHTML-Tags im Kontext validiert werden und man dadurch genötigt ist jedes Tag zu entwerten (z.B. per Umschreibung als &lt; für < oder per Escapen der Zeichen mit einem Backslash (\). Diese Entwertung entfällt bei der Angabe als CDATA und validiert einwandfrei.

Da nun aber einige ältere Browser dieses Tag nicht verstehen (und Javascript-Fehler werfen) wird es für sie einfach auskommentiert:

<script type="text/javascript">
/* <![CDATA[ */
  // content of your Javascript goes here
/* ]]> */
</script>

Das Dokument validiert wie gehabt, da die Kommentarzeichen für den Validator keine Bedeutung haben, und auch ältere Browser die XHTML nicht verstehen und alles als HTML parsen, interpretieren das Javascript korrekt.

Zur Veranschaulichung der besprochenen Thematik noch ein kleines Beispiel:

Wir wollen einem Element mit der id “myText” html-Code zuweisen.

<script type="text/javascript">
  $("myText").setHTML("<p>Hallo</p>");
</script>

Mit dem oben genannten Codebeispiel ohne die explizite Angabe des script-Inhalts als CDATA wird ein XHTML-Dokument nicht validieren (siehe Bild):

XHTML Elemente in einem Script-Tag sind nicht valide

Nach dem Deklarieren als CDATA validiert das Dokument.

<script type="text/javascript">
/* <![CDATA[ */
  $("myText").setHTML("<p>Hallo</p>");
/* ]]> */
</script>

Zuletzt führt Stephen Chapman noch einen oft begangenen Fehler beim Einbinden von Javascript an:

<script type="text/javascript">
<!-- // hide from really old browsers that noone uses anymore
  // also hide from browsers that use the XHTML DTD
  // content of your Javascript goes here
// -->
</script>

Für moderne Browser und den Validator (und eben auch uralt-Browser) wird dadurch das Javascript komplett auskommentiert. Somit wird es wahrscheinlich bei einer neuen Generatoin Browser, welche sich strikt an XHTML Richtlinien hält, nicht mehr ausgeführt und sollte daher vermieden werden.

Publiziert am 17. Okt. 2007 von mediavrog in , . Kategorie: XH.

Share and Enjoy: Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • Y!GG
  • MisterWong
  • Linkarena
  • Facebook
  • TwitThis
  • email
  • del.icio.us
  • Digg
  • StumbleUpon
  • Technorati
Monster-Me eating knowledge
12 Kommentare RSS Icon
Trackback URL
Einen Kommentar hinterlassen

Du kannst die folgenden Schlagwörter verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  1. Hallo,

    also anwenden tu ich das schon länger, aber JETZT habe ich endlich mal eine leicht verständliche Erklärung dafür gefunden, was CDATA überhaupt macht und warum “/*… */” notwendig ist.

    Daumen hoch, vielen Dank!

    Der Pac-Man :-)

  2. Genau danach hab ich gerade gesucht. Ich hab nämlich vor den JS-Teil vom Analyse System ganz am ende des Dokuments einzubinden um den Seitenaufbau zu beschleunigen.

    Vielen Dank für den Artikel. =)

  3. thoms

    Hat mir sehr geholfen. Danke!

  4. Danke für die Erklärung, das hat sehr geholfen ein JavaScript nicht umschreiben zu müßen. Jetzt haben wir xhtm Strict geschafft. *DANKE*

    MfG

    Michael finger
    Holztechniker

  5. Benjamin Berlin Schmidt

    Danke Dir:
    - ausfuehrlich
    - klar strukturiert
    - gut verlinkt

top top