あるCDATAのタグは、ときにスクリプトタグ内とあれば、これまで必要?
つまり、これはいつ、どこにあるのか:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
これよりも好ましい:
<script type="text/javascript">
...code...
</script>
あるCDATAのタグは、ときにスクリプトタグ内とあれば、これまで必要?
つまり、これはいつ、どこにあるのか:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
これよりも好ましい:
<script type="text/javascript">
...code...
</script>
回答:
あなたがXMLとしてパースする文書が必要な場合は、A CDATAセクションが必要とされる(例えばXHTMLページはXMLとして解釈されている場合)、あなたは文字通り書くことができるようにしたいi<10
とa && b
の代わりにi<10
とa && b
、XHTMLは、解析された文字データとしてJavaScriptコードを解析するとデフォルトでは文字データとは異なります。これは、外部ソースファイルに格納されているスクリプトの問題ではありませんが、XHTMLのインラインJavaScriptの場合は、おそらく CDATAセクションを使用する必要があります。
多くのXHTMLページがXMLとして解析されることを意図していないことに注意してください。その場合、これは問題になりません。
この件に関する適切な説明については、https://web.archive.org/web/20140304083226/http: //javascript.about.com/library/blxhtml.htmを参照してください。
&
と<
文字を避ければ、CDATAセクションは必要ありません。HTMLとXHTMLの両方で正常に動作します。重要なコードをすべて外部スクリプトに入れ、インラインスクリプトを使用するなどして、簡単にこれを実現できます。変数を初期化します(必要に応じて、文字列リテラルで&
/ <
へ\x26
/ \x3C
をエスケープします)。
ブラウザがマークアップをXMLとして扱う場合:
<script>
<![CDATA[
...code...
]]>
</script>
ブラウザがマークアップをHTMLとして扱う場合:
<script>
...code...
</script>
ブラウザーがマークアップをHTMLとして扱い、XHTML 1.0マークアップ(たとえば)を検証する場合。
<script>
//<![CDATA[
...code...
//]]>
</script>
/* ... */
。そうしないと、改行が削除されるとコードが壊れます
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では、さまざまなルールが適用されます。(非IE)ブラウザーは、XHMTLドキュメントがXMLコンテンツタイプで提供される場合にのみXMLパーサーを使用することに注意してください。
XMLパーサーにとって、script
タグは他のどのタグよりも優れていません。特に、スクリプトノードには、「<
」によってトリガーされる非テキストの子ノードが含まれる場合があります。「&
」記号は文字エンティティを示します。
だから、XHTMLで、これはない可能:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
これを回避するには、スクリプト全体をCDATA
セクションにラップします。これはパーサーに指示します:「このセクションでは<
&
、「」と「」を制御文字として扱わないでください。」JavaScriptエンジンが " <![CDATA[
"および " ]]>
"マークを解釈しないようにするには、コメントでそれらをラップします。
スクリプトに " <
"または " &
" が含まれていない場合は、CDATA
セクションは必要ありません。
</
内部のスクリプトタグは悪いです。
<script>var b = "<b>bold</b>";</script>
失敗しましたが、あなたの答えを読んで<script>var b = "<b>bold<\/b>";</script>
修正した後
基本的には、XHTMLとHTMLの両方であるドキュメントを記述できるようにすることです。問題は、XHTML内で、XMLパーサーがスクリプトタグ内の&、<、>文字を解釈し、XML解析エラーを引き起こすことです。したがって、次のようなエンティティを使用してJavaScriptを記述できます。
if (a > b) alert('hello world');
しかし、これは非現実的です。より大きな問題は、ページをHTMLで読み取る場合、タグスクリプトは「デフォルト」でCDATAと見なされ、そのようなJavaScriptが実行されないことです。したがって、XHTMLパーサーとHTMLパーサーの両方を使用して同じページをOKにする場合は、スクリプトタグをXHTMLのCDATA要素で囲む必要がありますが、HTMLで囲む必要はありません。
このトリックは、CDATA要素の開始をJavaScriptコメントとしてマークします。HTMLでは、JavaScriptパーサーはCDATAタグを無視します(コメントです)。XHTMLでは、XMLパーサー(JavaScriptの前に実行されます)がそれを検出し、CDATAの終わりまでの残りをCDATAとして扱います。
外部参照ではなく、JavaScriptがページに埋め込まれている場合に、XHTML検証が正しく機能することを保証します。
XHTMLでは、ページがXMLマークアップ要件に厳密に準拠している必要があります。JavaScriptには特別な意味を持つ文字が含まれている可能性があるため、CDATAでラップして、検証で不正な形式としてフラグが立てられないようにする必要があります。
Web上のHTMLページでは、タグとタグの間に必要なJavaScriptを含めるだけです。WebページでHTMLを検証すると、JavaScriptコンテンツはCDATA(文字データ)と見なされるため、バリデーターによって無視されます。最近のXHTML標準に従ってWebページを設定する場合も同様です。XHTMLでは、スクリプトタグ間のコードはPCDATA(解析された文字データ)と見なされ、バリデーターによって処理されます。
このため、Webページを「破壊」せずに、ページのスクリプトタグの間にJavaScriptを含めることはできません(少なくともバリデータに関する限り)。
あなたは学ぶことができ、ここでCDATAの詳細、およびここでXHTMLについての詳細を。
CDATAは、中のコンテンツがXMLではないことを示します。
ウィキペディアの説明です
検証したいとき(XML / XHTMLで-ありがとう、Loren Segal)。