SitePoint: New Articles, Fresh Thinking for Web Developers and Designers

Craig Buckler氏はSitePointにおいてHow to Fix Randomly Disappearing Absolutely-Positioned Elements in IEのタイトルのもと、IE8でローカルサーバのコンテンツを参照している場合にのみ発生する奇妙はバグがあることを伝えていた。同氏はAre You Sure You’re Testing IE8? How to Avoid Triggering Compatibility Viewで、例の問題はIE8がイントラネットにおいて互換表示をデフォルトにしていることが原因だったと説明。互換表示が有効になるケースと、それを無効にする方法をまとめている。

IE8には次の3種類のドキュメントモードが用意されている。標準規約に準拠してほしいという開発側からの要望に答えつつ、従来のコンテンツとの互換性を確保するために用意されたものだ。

ドキュメントモード 内容
IE8標準モード IE8のデフォルトモード。もっとも標準規約に準拠している
IE7標準モード IE7相当。ただしセキュリティ改善やアクセシビリティ向上のためまったく同じではない
Quirksモード IE5相当

IE8標準モード以外のモードを使うにはHTTPレスポンスヘッダで指定する、DOCTYPEで指定する、metaタグで指定するというサーバサイドおよびコンテンツ内での指定があるほか、IE8側で制御することもできる。Are You Sure You’re Testing IE8? How to Avoid Triggering Compatibility ViewではIE8が互換表示を実施するケースとして次の4つを紹介している。

  1. 特定の条件を満たすページを表示すると更新ボタンの左横に『互換表示ボタン』が表示される。このボタンを押すと条件に応じた互換表示が実施される
  2. メニューからツール、互換表示設定を選択し、「互換表示ですべてのWebサイトを表示する」にチェック入れると、すべてのサイトが互換表示でレンダリングされるようになる
  3. Microsoftが提供している互換表示リストに掲載されているページはデフォルトで互換表示が利用される。対象になっているサイトは「res://iecompat.dll/iecompatdata.xml」でチェックできる。これは頻繁に互換表示ボタンが押されているサイトの中からデフォルトで互換表示を採用するのが妥当だと判断されたものの一覧だとされている
  4. イントラネットのコンテンツはデフォルトで互換表示の対象となる

条件が合うと更新ボタンの左横に互換表示ボタンが表示される

互換表示ボタンを押した場合、コンテンツは互換表示でレンダリングされる

ツール、互換表示設定で表示されてるダイアログで設定を変更するとすべてのサイトを互換表示で閲覧するように設定可能

「res://iecompat.dll/iecompatdata.xml」でMicrosoftが取りまとめている互換表示リストの閲覧

イントラネットのコンテンツをデフォルトで互換表示にするというのは妥当な設定といえる。イントラネット上のコンテンツは古いものであることが多く、互換表示の方が適切なことが多いからだ。しかし制作中のWebページやWebサイトチェックに使うIE8が互換表示になっては都合が悪い。

ここで問題になるのは何をもって「イントラネットにあるコンテンツ」と判断しているかだが、Craig Buckler氏は自分が実施した調査範囲内だと前置きしたうえで、どうやらドットを含まないドメイン名を使ってコンテンツにアクセスしている場合にはイントラネットだと判断しているようだと説明している。またlocalhost、127.0.0.1、192.168.x.xのようなIPやドメイン名でのアクセスはイントラネットとは判定されなかったという。

イントラネットでの互換表示設定を無効にする

知らないうちに互換表示になっていると、How to Fix Randomly Disappearing Absolutely-Positioned Elements in IEにあるようにIE8のバグであると判断して無用の労力を浪費する可能性がある。メニューからツール、互換表示設定を選択し、「互換表示でイントラネットサイトを表示する」のチェックをはずしておけば、そうした問題を避けることができる。