Windows Internet Explorer 9

IE9はXHTMLをネイティブにサポートする初のIEになる。サポートするバージョンはXHTML5だ。しかし、もともとXMLの表記に準拠してHTMLを記述していると、HTMLとXHTMLの違いが意識しにくいかもしれない。IE9のHTMLやSVGでサポートされている要素や属性はそのままXHTMLでも利用できるのでなおさらだ。しかし、XHTMLとして認識させる方法やフレーム読み込みの規則などがHTMLと異なるため、ローカルでファイルとして作成した段階では問題ないように見えるものの、サーバにデプロイするとうまく閲覧できないという経験があるかもしれない。

XHTML in IE9 - IEBlogにおいて、IE9の挙動をベースにHTMLとXHTMLの違いや、XHTMLとして動作するための方法が簡潔に紹介されている。HTMLとXHTMLの違いを把握し、どういった設定でブラウザがどういった挙動の違いを示すのかという資料として参考になる。紹介されている内容は次のとおり。

1. XHTMLとして配信する方法

ローカルファイルの場合、拡張子が「.xhtml」または「.xht」のファイルがXHTMLとして扱われるが、サーバにデプロイした場合には、サーバのレスポンスヘッダにおけるContent-Typeの内容が「application/xhtml+xml」の場合にだけXHTMLとして扱われる。DOCTYPEの指定にXHTML DTDを追加しても効果はなく、レスポンスヘッダの内容でのみ指定可能。サーバでの設定が必要。

2. XHTMLをサポートしていない既存のブラウザにも対応させる方法

ブラウザがXHTMLをサポートしているかどうかを判断して、Webサーバのレスポンスヘッダの内容を変更するようにWebサーバを設定する。ブラウザから送信されてくるHTTP Acceptヘッダにapplication/xhtml+xmlが含まれている場合には、レスポンスヘッダのContent-Typeの内容を「application/xhtml+xml」に設定し、それ以外の場合にはContent-Typeの内容を「text/html」に設定する。これでXHTMLをサポートしているブラウザにはXHTMLとしての指定が、XHTMLをサポートしていないブラウザにはHTMLはとして扱う指定が送られることになる。

3. XHTMLとして扱われているかどうか判断する方法

IE9のデベロッパツールで確認できる。F12を押してデベロッパツールを起動し、「Network」タブを表示する。「Start Capture」をクリックしてキャプチャリングを開始してからページをロードすると、ネットワークタブにコンテンツのダウンロードと、そのコンテンツの種類が表示される。この内容がapplication/xhtml+xmlになっていればXHTMLとして扱われ、text/htmlならHTMLで扱われる。

Internet Explorer Test Drive - HTML5 Speed Readingデモ実行例

Content-Typeはtext/html

Internet Explorer Test Drive - SVG Helicopterデモ実行例

Content-Typeはapplication/xhtml+xml

Internet Explorer Test Drive - SVG-oidsデモ実行例

Content-Typeはapplication/xhtml+xml

4. XHTMLとHTMLの主な違い

  1. XHTMLとHTMLではパースエラー時のIE9の挙動が異なる。XHTMLの場合、パースエラーが発生した場合には自動補正は実施せずに、そこでパースを終了して、パースできたところまでをレンダリングする。特定の場所でレンダリングが停止するため、どこでエラーが発生しているのかを特定しやすい。エラーの詳細はデベロッパツールのConsoleタブで確認できる。
  2. XHTMLは大文字と小文字を区別する。このため、XHTMLやXHTMLにアクセスするJavaScriptやCSSでは基本的に小文字を使用するべき。ただし、XHTMLに組み込まれることになるほかの言語は大文字と小文字が混じっていても問題ない。
  3. XHTMLは名前空間をサポートしている。htmlにはxmlns="http://www.w3.org/1999/xhtml"の名前空間を指定するし、svg要素にはxmlns="http://www.w3.org/2000/svg"の名前空間を指定する。

XHTML in IE9に掲載されている名前空間指定の例は次のとおり。html要素とsvg要素に名前空間が指定されている。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Sample</title>
  </head>
  <body>
    <h1>Sample</h1>
    <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
      <circle fill="green" cx="50" cy="50" r="50"/>
    </svg>
  </body>
</html>

5. XHTMLのドキュメントモードと読み込み規則

IE9ではXHTMLは常にIE9スタンダードモードとして処理される。デベロッパツールからモードを変更することはできない。これはIE9においてはじめてネイティブにXHTMLをサポートするため、レガシーモードで動作させる必要がないため。このため、フレームでXHTMLドキュメントを読み込むような場合、その親となるページがIE9スタンダードモードでレンダリングされている必要がある。そうでない場合、XHTMLドキュメントを読み込むことはできない。この規則はimage/svg+xmlに対しても適用される。