Hatena::ブログ(Diary)

HM weblog

 | 

2006-06-17

script要素とHTMLとXHTMLとCDATAと#PCDATA

d.aql - scriptタグの中にJavaScriptを書く正しい方法のコメント欄から:

XHTMLの場合中は#PCDATAなので、実体参照にエスケープすれば大丈夫な気がする(スクリプトエンジンに渡される前に実体参照が展開される気がする)んですけれど、多分ブラウザはきちんと解釈してくれなさそう。

d.aql - scriptタグの中にJavaScriptを書く正しい方法

ふむふむ。本當にきちんと解釈してくれないかどうか、次のXHTML文書を擴張子が.htmlなファイルと.xhtmlなファイルに保存し、それぞれをFirefox 1.5.0.4で確認してみた。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <title>test</title>
    <script type="text/javascript">
      alert('&lt;p&gt;...&lt;/p&gt;');
    </script>
  </head>
  <body>
    <p>test.</p>
  </body>
</html>

結果は、擴張子 .html (text/html) では&lt;p&gt;...&lt;/p&gt;と表示、 .xhtml (application/xhtml+xml) では<p>...</p>と表示された。Opera 8.54でも同じ結果。IEは、知らない。IE6はそもそもXHTML非對應だし。といふことでブラウザはきちんと解釈してくれます。

あれ? でもかういふ風にMIME型によって擧動を變へるのってどうなんだらう……。たとへtext/htmlであってもDTDには<!ELEMENT script (#PCDATA)>*とあるのだから、そのとほりに解釋されるべきのやうな氣がする。XHTML1の使はれ方の現状を考へると現實的な擧動だらうけど、しかしかういふ風にDTDの解釋を變へるのは許されてゐるのだらうか。(補足: text/htmlとHTML UAとXHTML 1.0と文書型宣言邊りについての疑問)

(以下2006-06-25追記): ……まあ、いづれにせよXHTML 1.0C. HTML Compatibility GuidelinesXHTML 1.0: The Extensible HyperText Markup Language (Second Edition)に從ってゐれば、script要素(及びstyle要素)の内容が問題になる事は無いけれど。以下は邦譯のXHTML 1.0: 拡張可能ハイパーテキストマークアップ言語から。

スタイルシートが <&>-- かを使っている場合には、外部スタイルシートを使うこと。スクリプトが <&>-- かを使っている場合には、外部スクリプトを使うこと。

XHTML 1.0: 拡張可能ハイパーテキストマークアップ言語
 |