Warum funktionieren selbstschließende Skriptelemente nicht?

Was ist der Grund dafür, dass die Browser nicht richtig erkennen:

<script src="foobar.js" /> <!-- self-closing script element -->

Nur dies wird erkannt:

<script src="foobar.js"></script>

Verstößt dies gegen das Konzept der XHTML-Unterstützung?

Hinweis: Diese Aussage ist zumindest für alle IE (6-8 beta 2) korrekt.

Lösung

Die XHTML 1-Spezifikation besagt:

С.3. Elementminimierung und leere Elementinhalte

Bei einer leeren Instanz eines Elements, dessen Inhaltsmodell nicht EMPTY ist (z.B. ein leerer Titel oder Absatz), darf nicht die minimierte Form verwendet werden (z.B. <p> </p> und nicht <p />).

Die XHTML DTD spezifiziert Skript-Elemente als:


Kommentare (10)

Internet Explorer 8 und frühere Versionen unterstützen kein XHTML-Parsing. Selbst wenn Sie eine XML-Deklaration und/oder einen XHTML-Doctype verwenden, parst der alte IE das Dokument immer noch als reines HTML. Und in einfachem HTML wird die selbstschließende Syntax nicht unterstützt. Der abschließende Schrägstrich wird einfach ignoriert, Sie müssen einen expliziten schließenden Tag verwenden.

Selbst Browser mit Unterstützung für XHTML-Parsing, wie IE 9 und höher, analysieren das Dokument immer noch als HTML, es sei denn, Sie stellen das Dokument mit einem XML-Inhaltstyp bereit. Aber in diesem Fall zeigt der alte IE das Dokument überhaupt nicht an!

Kommentare (3)

Im Gegensatz zu XML und XHTML kennt HTML die selbstschließende Syntax nicht. Browser, die XHTML als HTML interpretieren, wissen nicht, dass das "/"-Zeichen anzeigt, dass der Tag selbstschließend sein sollte; stattdessen interpretieren sie es wie ein leeres Attribut, und der Parser denkt immer noch, der Tag sei "offen".

Genauso wie <script defer> als <script defer="defer"> behandelt wird, wird <script /> als <script /="/"> behandelt.

Kommentare (3)