951

スクリプト タグでCDATAタグが必要になることはありますか?また、必要な場合はいつですか?

言い換えれば、これはいつ、どこで:

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

これよりも好ましい:

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

15 に答える 15

600

ドキュメントを XML として解析する必要があり (たとえば、XHTML ページが XML として解釈される場合)、 andの代わりにリテラルのandを記述できるようにするi<10a && bi&lt;10a &amp;&amp; b場合は、CDATA セクションが必要です。これは、XHTML が JavaScript コードを解析済みの文字データとして解析するためです。デフォルトでは文字データではありません。これは、外部ソース ファイルに格納されているスクリプトの問題ではありませんが、XHTML のインライン JavaScript では、おそらくCDATA セクションを使用する必要があります。

多くの XHTML ページは、XML として解析されることを意図していないことに注意してください。その場合、これは問題になりません。

この件に関する優れた記事については、 https://web.archive.org/web/20140304083226/http: //javascript.about.com/library/blxhtml.htm を参照してください。

于 2008-09-15T20:54:44.943 に答える
236

ブラウザーがマークアップを XML として扱う場合:

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

ブラウザがマークアップを HTML として扱う場合:

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

ブラウザーがマークアップを HTML として扱い、XHTML 1.0 マークアップ (たとえば) を検証したい場合。

<script>
//<![CDATA[
    ...code...
//]]>
</script>
于 2008-09-15T20:58:56.617 に答える
135

HTML

HTML パーサーは、<script>との間のすべてを</script>スクリプトの一部として扱います。一部の実装では、正しい終了タグさえ必要ありません。彼らは " " でスクリプトの解釈を停止します。これは仕様</によると正しいものです。

更新HTML5 および現在のブラウザーでは、もはやそうではありません。

したがって、HTML では、これは不可能です。

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

CDATAセクションはまったく効果がありません。だからこそ書く必要がある

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

または類似。

これは、 として提供される XHTML ファイルにも適用されますtext/html。(IE は XML コンテンツ タイプをサポートしていないため、これはほとんどの場合当てはまります。)

XML

XML では、さまざまな規則が適用されます。XHMTL ドキュメントが XML コンテンツ タイプで提供される場合、(IE 以外の) ブラウザーは XML パーサーのみを使用することに注意してください。

XML パーサーにとって、scriptタグは他のどのタグよりも優れているわけではありません。特に、スクリプト ノードには、" " によってトリガーされる非テキストの子ノードが含まれる場合があります<。「&」記号は文字エンティティを表します。

したがって、XHTML では、これは不可能です。

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

これを回避するには、スクリプト全体をCDATAセクションにラップします。これはパーサーに、「このセクションでは、" " と " " を制御文字として扱わない<&でください」と伝えます。JavaScript エンジンが " <![CDATA[" および " ]]>" マークを解釈しないようにするには、それらをコメントで囲むことができます。

スクリプトに " <" または " " が含まれていない場合は、セクション&は必要ありません。CDATA

于 2009-09-20T09:05:20.590 に答える
32

基本的には、XHTML と HTML の両方であるドキュメントを作成できるようにすることです。問題は、XHTML 内で、XML パーサーがスクリプトタグ内の &、<、> 文字を解釈し、 XML 解析エラーが発生することです。したがって、エンティティを使用して JavaScript を記述できます。たとえば、次のようになります。

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

しかし、これは非現実的です。より大きな問題は、HTML でページを読む場合、タグスクリプトは「デフォルトで」CDATA と見なされ、そのような JavaScript は実行されないことです。したがって、同じページを XHTML パーサーと HTML パーサーの両方を使用して OK にしたい場合は、scriptタグを XHTML の CDATA 要素で囲む必要がありますが、HTML で囲む必要はありません。

このトリックは、CDATA 要素の開始を JavaScript コメントとしてマークします。HTML では、JavaScript パーサーは CDATA タグ (コメント) を無視します。XHTML では、XML パーサー (JavaScript の前に実行される) がそれを検出し、CDATA の最後まで残りを CDATA として扱います。

于 2010-03-01T19:26:26.147 に答える
24

それは X(HT)ML のことです。<JavaScript 内でやのような記号を使用する場合>、たとえば 2 つの整数を比較する場合、これは XML のように解析する必要があるため、タグの開始または終了としてマークされます。

CDATA は、次の行 ( までのすべて]]>が XML ではないため、そのように解析すべきではないことを意味します。

于 2010-03-01T19:19:36.257 に答える
18

HTML4 では CDATA を使用しないでください。ただし、XHTML では CDATA を使用する必要があり、< や > などのエスケープされていない記号がある場合は XML で CDATA を使用する必要があります。

于 2008-09-15T20:56:21.117 に答える
17

外部から参照されるのではなく、ページに JavaScript が埋め込まれている場合に、XHTML 検証が正しく機能することを確認します。

XHTML では、ページが XML マークアップ要件に厳密に準拠している必要があります。JavaScript には特別な意味を持つ文字が含まれている可能性があるため、検証によって不正な形式としてフラグが立てられないように、その文字を CDATA でラップする必要があります。

Web 上の HTML ページでは、 と タグの間に必要な JavaScript を含めるだけです。Web ページの HTML を検証すると、JavaScript コンテンツは CDATA (文字データ) と見なされ、バリデーターによって無視されます。Web ページを設定する際に最新の XHTML 標準に従っている場合、同じことは当てはまりません。XHTML では、script タグ間のコードは PCDATA (解析された文字データ) と見なされ、バリデータによって処理されます。

このため、(少なくともバリデータに関する限り) Web ページを「壊す」ことなく、ページの script タグの間に JavaScript を含めることはできません。

CDATA の詳細についてはこちらを、XHTML の詳細についてはこちらをご覧ください。

于 2010-03-01T19:20:35.020 に答える
11

CDATA は、内容が XML ではないことを示します。

ここにウィキペディアの説明があります

于 2010-03-01T19:19:43.650 に答える
9

XHTML に厳密に準拠する場合は、CDATA が必要です。これにより、より小さい記号とアンパサンドが無効な文字としてフラグ付けされなくなります。

于 2008-09-15T20:54:38.267 に答える
8

xhtml 検証中の xml エラーを回避します。

于 2010-03-01T19:19:12.170 に答える
8

CDATA は、ブラウザにテキストをそのまま表示し、HTML としてレンダリングしないように指示します。

于 2010-03-01T19:19:19.267 に答える
5

XMLノード内のテキストはJavaScriptとして評価される前に子要素として扱われるため、CDATAはすべてのXML方言で必要です。これは、 JSLintが正規表現の<文字について不平を言う理由でもあります。

参考文献

于 2012-08-27T20:37:56.907 に答える
5

CDATA は、内容が XML ではないことを示します。

于 2012-08-29T22:50:32.787 に答える
2

そうすれば、古いブラウザは Javascript コードを解析せず、ページが壊れません。

下位互換性。好きにならなきゃ。

于 2010-03-01T19:19:14.677 に答える
2

検証したい場合(XML/XHTML で - Loren Segalに感謝)。

于 2008-09-15T20:53:21.997 に答える