Frage Wann ist ein CDATA-Abschnitt innerhalb eines Script-Tags erforderlich?


Werden CDATA-Tags in Skript-Tags jemals benötigt und wenn ja, wann?

Mit anderen Worten, wann und wo ist das:

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

vorzuziehen:

<script type="text/javascript">
...code...
</script>

836
2017-09-15 20:52


Ursprung


Antworten:


Ein CDATA-Abschnitt ist erforderlich, wenn Sie Ihr Dokument als XML analysieren möchten (z. B. wenn eine XHTML-Seite als XML interpretiert wird). und Sie möchten in der Lage sein, wörtlich zu schreiben i<10 und a && b Anstatt von i&lt;10 und a &amp;&amp; b, da XHTML den JavaScript-Code als analysierte Zeichendaten im Gegensatz zu Zeichendaten standardmäßig parsen wird. Dies ist kein Problem mit Skripten, die in externen Quelldateien gespeichert sind, aber für jedes Inline-JavaScript in XHTML wahrscheinlich möchte einen CDATA-Abschnitt verwenden.

Beachten Sie, dass viele XHTML-Seiten niemals als XML analysiert werden sollten. In diesem Fall ist dies kein Problem.

Für eine gute Beschreibung zu diesem Thema, siehe http://javascript.about.com/library/blxhtml.htm


551
2017-09-15 20:54



Wenn Browser das Markup als XML behandeln:

<script>
<![CDATA[
    ...code...
]]>
</script>

Wenn Browser das Markup als HTML behandeln:

<script>
    ...code...
</script>

Wenn Browser das Markup als HTML behandeln und möchten, dass Ihr XHTML 1.0-Markup (zum Beispiel) validiert wird.

<script>
//<![CDATA[
    ...code...
//]]>
</script>

223
2017-09-15 20:58



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 hören mit der Skript-Interpretation auf "</", was nach der Spezifikationen.

Aktualisieren In HTML5 und mit aktuellen Browsern ist das nicht mehr der Fall.

In HTML ist dies also der Fall nicht möglich:

<script>
var x = '</script>';
alert(x)
</script>

EIN CDATA Abschnitt 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 IE XML-Inhaltstypen nicht unterstützt, trifft dies meistens zu.)

XML

In XML gelten andere Regeln. Beachten Sie, dass Browser (nicht IE) nur einen XML-Parser verwenden, wenn das XHMTL-Dokument mit einem XML-Inhaltstyp geliefert wird.

Zum XML-Parser a script Das Tag ist nicht besser als jedes andere Tag. Insbesondere kann ein Skriptknoten Nicht-Text-Kindknoten enthalten, ausgelöst durch "<"; und ein "&"Vorzeichen" bezeichnet eine Zeichenentität.

In XHTML ist dies also nicht möglich:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

Um das Problem zu umgehen, können Sie das gesamte Skript in a verpacken CDATA Sektion. Dies sagt dem Parser: "In diesem Abschnitt behandle nicht "<" und "&"als Kontrollfiguren. " Um zu verhindern, dass die JavaScript-Engine den "<![CDATA[" und "]]>"Markierungen, Sie können sie in Kommentare umhüllen.

Wenn Ihr Skript keine enthält<" oder "&", du brauchst keine CDATA Abschnitt sowieso.


117
2017-09-20 09:05



Grundsätzlich ist es möglich, ein Dokument zu schreiben, das sowohl XHTML als auch HTML ist. Das Problem ist, dass der XML - Parser in XHTML die Zeichen &, <,> in der Skript Tag-und-Ursache-XML-Parsing-Fehler. So können Sie Ihr JavaScript mit Entitäten schreiben, z. B .:

if (a &gt; b) alert('hello world');

Aber das ist unpraktisch. Das größere Problem ist, dass wenn Sie die Seite in HTML lesen, das Tag Skriptwird standardmäßig als CDATA betrachtet und solches JavaScript wird nicht ausgeführt. Wenn Sie möchten, dass die gleiche Seite sowohl mit XHTML- als auch mit HTML-Parsern in Ordnung ist, müssen Sie die Datei einschließen Skript Kennzeichnen Sie das CDATA-Element in XHTML, aber NICHT in HTML.

Dieser Trick markiert den Start eines CDATA-Elements als JavaScript-Kommentar. In HTML ignoriert der JavaScript-Parser das CDATA-Tag (es ist ein Kommentar). In XHTML erkennt der XML-Parser (der vor dem JavaScript ausgeführt wird) dies und behandelt den Rest bis zum Ende von CDATA als CDATA.


29
2018-03-01 19:26



Es ist ein X (HT) ML-Ding. Wenn Sie Symbole wie verwenden < und > innerhalb des JavaScript, z.B. um zwei Ganzzahlen zu vergleichen, müsste dies wie XML geparst werden, also würden sie als Anfang oder Ende eines Tags markieren.

Die CDATA bedeutet, dass die folgenden Zeilen (alles bis zur ]]> ist kein XML und sollte daher nicht so geparst werden.


22
2018-03-01 19:19



Machen nicht Verwenden Sie CDATA in HTML4 aber Sie sollte Verwenden Sie CDATA in XHTML und Muss Verwenden Sie CDATA in XML, wenn Sie Symbole wie <und> entfernt haben.


16
2017-09-15 20:56



Damit wird sichergestellt, dass die XHTML-Validierung korrekt funktioniert, wenn JavaScript in Ihre Seite eingebettet ist und nicht extern referenziert wird.

XHTML erfordert, dass Ihre Seite den XML-Markup-Anforderungen entspricht. Da JavaScript Zeichen mit besonderer Bedeutung enthalten kann, müssen Sie es in CDATA umbrechen, um sicherzustellen, dass die Überprüfung es nicht als fehlerhaft kennzeichnet.

Bei HTML-Seiten im Web können Sie einfach das erforderliche JavaScript zwischen Tags und Tags einfügen. Wenn Sie den HTML-Code auf Ihrer Webseite validieren, wird der JavaScript-Inhalt als CDATA (Zeichendaten) betrachtet, der daher vom Validator ignoriert wird. Das gleiche gilt nicht, wenn Sie beim Einrichten Ihrer Webseite den neueren XHTML-Standards folgen. Bei XHTML wird der Code zwischen den Script-Tags als PCDATA (geparste Zeichendaten) betrachtet, die daher vom Validator verarbeitet werden.

Aus diesem Grund können Sie JavaScript nicht einfach zwischen die Skript-Tags auf Ihrer Seite einfügen, ohne Ihre Webseite zu "brechen" (zumindest was den Validator angeht).

Du kannst lernen mehr über CDATA hier, und mehr über XHTML hier.


16
2018-03-01 19:20



Wenn Sie eine strikte XHTML-Konformität anstreben, benötigen Sie den CDATA-Wert also weniger als und kaufmännische Und-Zeichen werden nicht als ungültige Zeichen gekennzeichnet.


9
2017-09-15 20:54



CDATA gibt an, dass der Inhalt nicht XML ist.

Hier ist eine Erklärung auf Wikipedia


9
2018-03-01 19:19