ブラウザが正しく認識できない理由は何ですか?
<script src="foobar.js" /> <!-- self-closing script element -->
だけが認識されます。
<script src="foobar.js"></script>
これはXHTMLサポートの概念を崩すものでしょうか?
注)この記述は、少なくともすべてのIE(6-8 beta 2)では正しいです。
XHTML 1の仕様では
С.3. Element Minimization and Empty Element Content
コンテンツモデルが
EMPTY
ではない要素の空のインスタンス(例えば、空のタイトルやパラグラフ)がある場合、最小化されたフォームを使用してはいけません(例えば、<p> </p>
を使用し、<p />
を使用してはいけません)。
XHTML DTDでは、script要素を次のように指定しています。
<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>
Internet Explorer 8以前のバージョンでは、XHTMLの解析をサポートしていません。XML宣言やXHTMLのdoctypeを使用しても、古いIEはドキュメントをプレーンなHTMLとして解析します。そして、プレーンなHTMLでは、self-closing構文はサポートされていません。トレイリングスラッシュは無視されますので、明示的に閉じるタグを使用する必要があります。
IE 9以降](http://blogs.msdn.com/b/ie/archive/2010/11/01/xhtml-in-ie9.aspx)のようにXHTMLの解析をサポートしているブラウザでも、ドキュメントをXMLコンテンツタイプで提供しない限り、ドキュメントをHTMLとして解析します。しかし、その場合、古いIEはその文書を全く表示しません。
XMLやXHTMLとは異なり、HTMLは自己閉鎖型の構文を知りません。 XHTMLをHTMLとして解釈するブラウザは、/
文字がタグの自閉性を示すことを知りません。代わりに空の属性のように解釈し、パーサーはタグが「開いている」と考えます。