CDATAタグはスクリプトタグに必要なことはありますか?必要な場合は?
言い換えれば、いつ、どこにこれがあります:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
これより好ましい
<script type="text/javascript">
...code...
</script>
文書をXMLとして解析する必要がある場合(たとえばXHTMLページがXMLとして解釈される場合) で、i<10
およびa && b
ではなくリテラルi<10
およびa && b
を記述できるようにするには、CDATAセクションが必要です。 XHTMLは、デフォルトでは文字データではなく、解析済み文字データとしてJavaScriptコードを解析します。これは外部のソースファイルに保存されているスクリプトの問題ではありませんが、XHTMLのインラインJavaScriptでは、 おそらく CDATAセクションを使いたいでしょう。
多くのXHTMLページは決してXMLとして解析されることを意図していなかったことに注意してください。その場合、これは問題にならないでしょう。
この件に関する良い記事については、 https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm を参照してください。
ブラウザがマークアップをXMLとして扱う場合:
<script>
<![CDATA[
...code...
]]>
</script>
ブラウザがマークアップをHTMLとして扱う場合:
<script>
...code...
</script>
ブラウザがマークアップをHTMLとして扱い、XHTML 1.0マークアップを検証したい場合(たとえば)。
<script>
//<![CDATA[
...code...
//]]>
</script>
HTMLパーサーは、<script>
と</script>
の間のすべてをスクリプトの一部として扱います。 一部の実装では、正しい終了タグさえ必要ありません。 「。</
」でスクリプトの解釈を停止します。これは specs に従って正しい
UpdateHTML5では、現在のブラウザーではそうではありません。
したがって、HTMLでは、これはnot可能です:
<script>
var x = '</script>';
alert(x)
</script>
CDATA
セクションはまったく効果がありません。それがあなたが書く必要がある理由です
var x = '<' + '/script>'; // or
var x = '<\/script>';
または類似。
これは、text/html
として提供されるXHTMLファイルにも適用されます。 (IEはXMLコンテンツタイプをサポートしていないため、これはほとんど真実です。)
XMLでは、さまざまなルールが適用されます。 (IE以外の)ブラウザは、XHMTLドキュメントがXMLコンテンツタイプで提供される場合にのみXMLパーサーを使用することに注意してください。
XMLパーサーにとって、script
タグは他のどのタグよりも優れています。特に、スクリプトノードには、「<
」によってトリガーされる非テキストの子ノードが含まれる場合があります。 「&
」記号は、文字エンティティを示します。
XHTMLでは、これはnot不可能です:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
これを回避するには、スクリプト全体をCDATA
セクションにラップします。これはパーサーに次のように伝えます。「このセクションでは、「<
」および「&
」を制御文字として扱わないでください。」 JavaScriptエンジンが「<![CDATA[
」および「]]>
」マークを解釈しないようにするには、それらをコメントで囲むことができます。
スクリプトに「<
」または「&
」が含まれていない場合は、とにかくCDATA
セクションは必要ありません。
基本的にはXHTMLとHTMLの両方である文書を書くことを許可することです。問題は、XHTML内では、XMLパーサーが script タグ内の&、<、>文字を解釈し、XML構文解析エラーを引き起こすことです。だから、あなたはあなたのJavaScriptをエンティティで書くことができます。例えば:
if (a > b) alert('hello world');
しかしこれは実用的ではありません。もっと大きな問題は、あなたがHTMLでページを読んだ場合、タグ script はCDATA 'デフォルトで'と見なされ、そのようなJavaScriptは実行されないということです。したがって、XHTMLパーサーとHTMLパーサーの両方を使用して同じページを正しく表示するには、XHTMLのCDATA要素で script タグを囲む必要がありますが、HTMLで囲む必要はありません。
このトリックはCDATA要素の始まりをJavaScriptのコメントとしてマークします。 HTMLでは、JavaScriptパーサーはCDATAタグを無視します(これはコメントです)。 XHTMLでは、XMLパーサー(JavaScriptの前に実行されます)がそれを検出し、CDATAの終わりまでCDATAとして残りを扱います。
それはX(HT)MLのものです。 JavaScript内で<
や>
のような記号を使用すると、 2つの整数を比較するために、これはXMLのように解析されなければならないでしょう、したがって、それらはタグの始まりまたは終わりとしてマークするでしょう。
CDATAは、次の行(]]>
までのすべてがXMLではないため、そのように構文解析されるべきではない)を意味します。
not HTML4でCDATAを使用しますが、should XHTMLでCDATAを使用し、must <や>などのエスケープされていないシンボルがある場合、XMLでCDATAを使用します。
外部参照ではなく、JavaScriptがページに埋め込まれている場合にXHTML検証が正しく機能するようにします。
XHTMLでは、あなたのページはXMLマークアップ要件に厳密に準拠している必要があります。 JavaScriptには特別な意味を持つ文字が含まれている可能性があるため、検証で不正な形式のフラグが設定されていないことを確認するためにCDATAでラップする必要があります。
Web上のHTMLページでは、タグの間に必要なJavaScriptを含めることができます。 Webページ上のHTMLを検証するとき、JavaScriptのコンテンツはCDATA(文字データ)であると見なされ、そのためバリデータによって無視されます。 Webページを設定する際に最新のXHTML標準に従う場合も同様です。 XHTMLでは、スクリプトタグ間のコードはPCDATA(解析済み文字データ)と見なされ、そのためバリデータによって処理されます。
このため、Webページを「壊す」ことなしにページのスクリプトタグの間にJavaScriptを含めることはできません(少なくともバリデータに関する限り)。
CDATAについてはこちら 、および XHTMLについてはこちら をご覧ください。
CDATAは、その内容がXMLではないことを示します。
これは wikipedia についての説明です。
XHTMLに厳密に準拠するためには、CDATAは必要最小限で、アンパサンドには無効な文字としてフラグが立てられません。
xhtml検証中のxmlエラーを回避するため。
CDATAはブラウザにテキストをそのまま表示し、HTMLとしてレンダリングしないように指示します。
CDATAは、その内容がXMLではないことを示します。
XMLノード内のテキストはJavaScriptとして評価される前に子要素として扱われるため、CDATAは任意のXML方言で必要です。これが JSLintが に正規表現の<
文字について不満を言う理由でもあります。
参考文献
検証したいとき (XML/XHTMLでは - ありがとう、 Loren Segal )。
そうすることで、古いブラウザはJavascriptコードを解析せず、ページは壊れません。
後方互換性それが大好きです。