it-swarm-eu.dev

Wann ist ein CDATA-Abschnitt in einem Script-Tag erforderlich?

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

Mit anderen Worten, wann und wo ist das:

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

diesem vorzuziehen:

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

Ein CDATA-Abschnitt ist erforderlich, wenn Ihr Dokument als XML analysiert werden soll (z. B. wenn eine XHTML-Seite als XML interpretiert wird) und Sie Literalcodes i<10 und a && b anstelle von i&lt;10 und schreiben möchten a &amp;&amp; b, da XHTML den JavaScript-Code standardmäßig als analysierte Zeichendaten und nicht als Zeichendaten analysiert. Dies ist kein Problem bei Skripten, die in externen Quelldateien gespeichert sind, aber für Inline-JavaScript in XHTML möchten Sie wahrscheinlich einen CDATA-Abschnitt verwenden.

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

Eine gute Beschreibung zu diesem Thema finden Sie unter https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

572
Michael Ridley

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 Sie möchten, dass Ihr XHTML 1.0-Markup (zum Beispiel) validiert wird.

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

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äß specs korrekt ist.

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

In HTML ist dies nicht möglich :

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

Ein Abschnitt CDATA hat überhaupt keine Wirkung . Deshalb musst du schreiben

var x = '<' + '/script>'; // or
var x = '<\/script>';

oder ähnliches.

Dies gilt auch für XHTML-Dateien, die als text/html bereitgestellt werden. (Da IE keine XML-Inhaltstypen unterstützt, ist dies meistens der Fall.)

XML

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

Für den XML-Parser ist ein script -Tag nicht besser als jedes andere Tag. Insbesondere kann ein Skriptknoten untergeordnete Nicht-Textknoten enthalten, die durch "<" ausgelöst werden. und ein "&" -Zeichen bezeichnet eine Zeicheneinheit.

In XHTML ist dies nicht möglich :

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

Um dies zu umgehen, können Sie das gesamte Skript in einen Abschnitt CDATA einschließen. Dies teilt dem Parser mit: 'In diesem Abschnitt behandeln "<" 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 keinen Abschnitt "<" oder "&" enthält, benötigen Sie ohnehin keinen Abschnitt CDATA.

121

Grundsätzlich ist es zu erlauben, ein Dokument zu schreiben, das sowohl XHTML als auch HTML ist. Das Problem ist, dass der XML-Parser in XHTML die Zeichen &, <,> im script -Tag interpretiert und einen XML-Parsing-Fehler verursacht. So können Sie Ihr JavaScript mit Entitäten schreiben, z.

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

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

Dieser Trick markiert den Beginn 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.

30
ondra

Es ist eine X (HT) ML-Sache. Wenn Sie Symbole wie < und > in JavaScript verwenden, z. Für den Vergleich von zwei Ganzzahlen müsste diese wie XML analysiert werden, sodass sie als Anfang oder Ende eines Tags markiert werden.

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

23
Franz

Verwenden Sie nicht CDATA in HTML4, aber Sie sollten CDATA in XHTML verwenden und müssen CDATA in XML verwenden, wenn Sie Symbole wie <und> ohne Aussparung haben.

18
Loren Segal

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

XHTML setzt voraus, dass Ihre Seite den XML-Markup-Anforderungen strikt entspricht. Da JavaScript möglicherweise Zeichen mit einer besonderen Bedeutung enthält, müssen Sie es in CDATA einschließen, um sicherzustellen, dass es bei der Validierung nicht als fehlerhaft gekennzeichnet wird.

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

Aus diesem Grund können Sie nicht einfach JavaScript zwischen die Skript-Tags auf Ihrer Seite einfügen, ohne Ihre Webseite zu beschädigen (zumindest für den Validator).

Sie können mehr über CDATA hier und mehr über XHTML hier lernen.

17
LBushkin

CDATA gibt an, dass die darin enthaltenen Inhalte nicht XML sind.

Hier ist eine Erklärung zu Wikipedia

10
Alex Beardsley

Wenn Sie eine strikte XHTML-Konformität anstreben, benötigen Sie CDATA, damit weniger als und und-Zeichen nicht als ungültige Zeichen gekennzeichnet werden.

9
Chris Shaffer

um XML-Fehler während der XML-Validierung zu vermeiden.

8
gehsekky

CDATA weist den Browser an, den Text so wie er ist anzuzeigen und nicht als HTML zu rendern.

8
Ikaso

CDATA gibt an, dass die darin enthaltenen Inhalte nicht XML sind.

6
Jim

CDATA ist in jedem XML-Dialekt erforderlich, da Text innerhalb eines XML-Knotens als untergeordnetes Element behandelt wird, bevor er als JavaScript ausgewertet wird. Dies ist auch der Grund, warum JSLint beschwert sich über das Zeichen < in regulären Ausdrücken.

Referenzen

5
Paul Sweatte
2
ceejayoz

Auf diese Weise analysiert ein älterer Browser den Javascript-Code nicht und die Seite bricht nicht zusammen.

Abwärtskompatibilität. Muss ich lieben.

2
Tyler Carter