Gemäß www.w3.org/TR/xhtml1/#h-4.8 kann der CDATA-Abschnitt wie folgt definiert werden: [no //]
Ja. In XHTML können sie das. Richtiges XHTML, wie es von einem XML-Parser gelesen wird, wenn Sie application/xhtml+xml
zu einem Webbrowser, der nicht IE ist.
Aber wahrscheinlich dienen Sie tatsächlich als text/html
was bedeutet, dass Ihr Browser kein "XML-Prozessor" ist, wie in diesem Abschnitt beschrieben. Er ist ein Legacy-HTML4-Parser, d.h. Sie müssen sich an die Anhang C Leitlinien und vermeiden Sie alle XML-Funktionen, die in HTML4 nicht funktionieren.
Insbesondere die Zeichenketten <![CDATA[
et ]]>
in einem <script>
o <style>
Blocks sind für einen HTML4-Parser nichts Besonderes, denn in HTML4 sind diese beiden Elemente 'CDATA-Elemente', für die kein Markup gilt (außer für den </
ETAGO-Sequenz, um das Element selbst zu beenden). Ein HTML4-Parser wird diese Zeichenfolgen also direkt an die CSS- oder JavaScript-Engine senden.
Denn <![CDATA[
kein gültiges JS ist, erhalten Sie einen JavaScript-Syntaxfehler. (Die anderen Antworten sind hier falsch: Es ist nicht nur bei sehr alten Browsern aber alle HTML4-Browser, die bei einem unkommentierten CDATA-Abschnitt im Skript Fehler anzeigen).
Sie verwenden die //
o /*
Kommentar, um den Inhalt vor der JavaScript- oder CSS-Engine zu verbergen. So:
<script type="text/javascript">//<![CDATA[
alert('a&b');
//]]></script>
(Beachten Sie die führende //
Dies wurde im W3Schools-Beispielcode ausgelassen und führt dazu, dass dieser Beispielcode überhaupt nicht funktioniert. Scheitern. Trauen Sie W3Schools nicht: sie haben nichts mit dem W3C zu tun und ihr Material ist oft Müll).
Dies wird von einem HTML-Parser als gelesen:
- Open-Tag
script
Festlegung von CDATA-Inhalten bis zum nächsten ETAGO
- Text
//<![CDATA[\n alert('a&b');\n//]]>
- ETAGO und close-tag
script
- -> der resultierende Inhalt wird an die JavaScript-Engine gesendet:
//<![CDATA[\nalert('a&b');\n//]]>
Sondern durch einen XML-Parser als:
- Open-Tag
script
(keine besonderen Auswirkungen auf das Parsing)
- Inhalt des Textes
//
- Offener CDATA-Abschnitt, der CDATA-Inhalt bis zur nächsten
]]>
Reihenfolge
- Text
\n alert('a&b');\n//
- CDATA-Abschnitt schließen
- Close-Tag
script
- -> der resultierende Inhalt wird an die JavaScript-Engine gesendet:
//\nalert('a&b');\n//
Der Parsing-Prozess ist zwar recht unterschiedlich, aber die JS-Engine endet in jedem Fall mit dem gleichen effektiven Code, da dank der //
Der einzige Unterschied besteht in den Kommentaren.
Dies ist ein ganz anderer Fall als bei der alten Schule:
<script type="text/javascript"><!--
alert('a&b');
//--></script>
die darin bestand, Skript-/Stil-Inhalte auszublenden, damit sie in Browsern, die diese nicht verstehen, nicht auf die Seite geschrieben werden <script>
et <style>
Tags. Dies führt nicht zu einem JavaScript/CSS-Fehler, da ein Hack auf einer anderen Ebene vorgenommen wurde: Es handelt sich um ein syntaktisches Merkmal der CSS- und JavaScript-Sprachen selbst que <!--
ist so definiert, dass sie nichts tut, so dass dieser Hack funktioniert.
Diese Browser gehören der Vergangenheit an; Sie sind absolut sollten diese Technik nicht anwenden heute. Vor allem in XHTML, denn ein XML-Parser würde Sie beim Wort nehmen und den gesamten Skriptblock in einen XML-Kommentar statt in ausführbaren Code verwandeln.
Ich möchte Skripte oder CSS in xHTML einbinden, ohne Sonderzeichen zu escapen.
Vermeiden Sie dies und Sie werden viel glücklicher sein.
Haben Sie wirklich brauchen die <
et &
Zeichen in einer <style>
? Nein, fast nie. Brauchen Sie sie wirklich in <script>
? Nun... manchmal, ja, und in diesem Fall ist der kommentierte CDATA-Abschnitt akzeptabel.
Aber um ehrlich zu sein, gilt die XHTML-Kompatibilitätsrichtlinie C.4 für HTML4 genauso wie für XHTML1: alles, was nicht trivial ist, sollte in einem externen Skript enthalten sein, und dann müssen Sie sich um nichts davon kümmern.