Hallo Christoph,
Die Zeichenkette "</" beendet den <script>-Teil.
Hier nicht
Oh doch.
Nein.
Doch. (Ha! ;))
Allerdings ist das, worüber wir jetzt grade debattieren, kein HTML-tag bzw. HTML-Problem,
Doch, und zwar ausschließlich.
sondern eine Javascript-Eigenschaft.
Nein, JavaScript existiert für den HTML-Parser nicht und er versteht JavaScript auch nicht.
Aber in meinem Beispiel sind diese "tags" auf der rechten Seite auch noch innerhalb von Anführungszeichen gesetzt (was Cheatah offenbar entgangen ist), sie sind Bestandteile eines strings, mit dem die Variable gefüttert wird.
Für den HTML-Parser gibt es keine »Strings«, er wendet beim Parsen lediglich die Regeln an, die der Datentyp CDATA vorschreibt.
Insofern sind sie "maskiert" und der <script>-Teil endet dadurch eben _nicht_.
Der HTML-Parser interessiert sich nicht dafür, ob der Elementinhalt JavaScript ist. Das script-Element muss dort zuende sein, wo das erste »</« nach dem script-Starttag vorkommt. Eine korrekte Maskierung wäre »</«.
Der Nachweis liegt darin, daß der _gesamte_ Script-Bereich tatsächlich ausgeführt wird, einschließlich der Dinge, die _nach_ diesem "</head>" notiert worden sind - und übrigens in allen (javascriptfähigen) Browsern ohne jede Fehlermeldung.
Das ist lediglich Fehlerkorrektur und gemäß Spec illegal, siehe Andreas' Link.
Du kannst dir ein Beispiel unter http://www.christoph-schnauss.de/prog/jscript/jscript05.htm anschauen. Dort ist auf "Ebene 3" genau dieses Script bereits seit langer Zeit im Einsatz.
Hinweis: die angegebene Seite ist _nicht_ valide. Das liegt daran, daß ich eben mal den Javascript-Teil in den Header-Bereich geschrieben habe, der Validator liest das dann mit und meckert folgerichtig.
Was für ein Quark. Wenn du dir die Fehlermeldungen genau durchliest, wirst du merken, dass der Validator die End-Tags im JavaScript-Code wie ganz normales Markup behandelt. Der Validator sieht <script type="text/javascript"> ...Zeichendaten... </title> und sagt folglich: »Dort ist ein End-Tag eines Elements title, welches nicht geöffnet wurde. Es wurde der End-Tag des script-Elements weggelassen, was gemäß DTD aber nicht erlaubt ist.« Der JavaScript-Code maskiert also nicht. Wenn du </title> und so weiter bei allen End-Tags im JavaScript-Code notierst, wirst du sehen, dass das Dokument valide ist, bis auf die Fehler in den Zeilen 106-108, welche damit aber nichts zu tun haben.
Normalerweise wird das Script als externe js-Datei eingebunden - und dann ist die Seite valide.
Ähm, du hast aber verstanden, worum es hier geht? Es ist etwas grundlegend anderes, wenn der JavaScript-Code außerhalb des Dokuments liegt. Dann kann dieser unbegrenzt viel unmaskiertes Markup enthalten, weil der HTML-Parser davon die Finger lässt. Hier ging es ausschließlich um JavaScript-Code, welcher Inhalt eines script-Elements direkt im HTML-Dokument ist.
Mathias