DATE : 2006/07/16 (Sun)
ブログを巡回していて興味深い話があったので、ここにメモしておきます。
XHTML 1.0の仕様書(邦訳)を眺めてみると、「4.8 スクリプト要素およびスタイル要素」の項目に、スクリプトは CDATA として記述しなければならないという内容が書かれています。ここで、CDATA とは、簡単言えば文書中の文字列のことを言います。なお、XHTML 文書は PCDATA であり、これはブラウザの解析対象になる CDATA のことを言います。
つまり、PCDATA として記述しなければいけないところに CDATA の記述をそのまま混ぜると、スクリプト中にある「<」などの文字をブラウザが XHTML として処理してしまう恐れがあるというわけです。
上の仕様の中では、スクリプトを次のように記述するように勧告されています。
<script>
<![CDATA[
// スクリプトの内容
]]>
</script>
「<![CDATA[ ... ]]>」で囲むことで、スクリプトを CDATA として記述しています。
実際には、次のように CDATA 宣言はコメントアウトします。(例は JavaScript の場合)
<script type="text/javascript">
// <![CDATA[
// スクリプトの内容
// ]]>
</script>
script 要素の中身はスクリプトエンジンに解析されてしまいます。そのため、CDATA 宣言があると文法エラーになる場合があります。
CDATA の宣言なしで標準にあったスクリプトを書くには、「<」の部分を「\<」とエスケープするなどの方法があるようです。
また、XHTML 1.0 の仕様の「C.4 埋め込みスタイルシート及びスクリプト」では、XHTML の解析対象となっている文字が含まれる場合は外部スクリプトにするという勧告がなされています。具体的には、「<」・「]]>」・「--」が該当するようです。
XHTML に対応していないブラウザへの互換性も考えると、CDATA 宣言でスクリプトを記述するよりも、「<」・「]]>」・「--」が含まれている場合は外部スクリプトにした方が良いかもしれません。
もっとも私の場合は、面倒臭いので全部外部スクリプトにしようと思います。( ´ー`)コーディング時は、XHTML に埋め込みますが