HTML
Ein HTML-Parser behandelt alles zwischen <script>und </script>als Teil des Skripts. Einige Implementierungen benötigen nicht einmal ein korrektes schließendes Tag. Sie stoppen die Skriptinterpretation bei " </", was gemäß den Spezifikationen korrekt ist .
Update In HTML5 und mit aktuellen Browsern ist dies nicht mehr der Fall.
In HTML ist dies also nicht möglich:
<script>
var x = '</script>';
alert(x)
</script>
Ein CDATAAbschnitt hat überhaupt keine Wirkung . Deshalb musst du schreiben
var x = '<' + '/script>'; // or
var x = '<\/script>';
o.ä.
Dies gilt auch für XHTML-Dateien, die als text/html. (Da der IE keine XML-Inhaltstypen unterstützt, ist dies meistens der Fall.)
XML
In XML gelten unterschiedliche Regeln. Beachten Sie, dass (Nicht-IE-) Browser einen XML-Parser nur verwenden, wenn das XHMTL-Dokument mit einem XML-Inhaltstyp bereitgestellt wird.
Für den XML-Parser ist ein scriptTag nicht besser als jedes andere Tag. Insbesondere kann ein Skriptknoten untergeordnete Nicht-Textknoten enthalten, die durch " <" ausgelöst werden . und ein " &" Zeichen bezeichnet eine Zeichenentität.
In XHTML ist dies also nicht möglich:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Um dies zu umgehen, können Sie das gesamte Skript in einen CDATAAbschnitt einschließen. Dies teilt dem Parser mit: 'Behandeln Sie in diesem Abschnitt " <" und " &" nicht als Steuerzeichen .' Um zu verhindern, dass die JavaScript-Engine die Markierungen " <![CDATA[" und " ]]>" interpretiert , können Sie sie in Kommentare einschließen.
Wenn Ihr Skript kein " <" oder " &" enthält, benötigen Sie CDATAohnehin keinen Abschnitt.