IE8, IE9 である環境(ドメイン)でだけ勝手に互換表示になる
IE の互換機能ドキュメントモード・ブラウザモードの違い という前座の記事を書きましたが、本当に書きたかったのは、こっちの話です…!
状況
以下のような状況で、ある環境(ドメイン)でだけIE8, IE9の表示崩れが起きる現象に当たることがあります。
- デプロイしているコードは同じ
- ヘッダにも疑わしい変化は無い
- 違うのはドメインだけ
調べてみると、勝手にIE7互換表示になっている。
原因
以下の二つの条件が重なると、IE8, IE9 は強制的にIE7ドキュメント互換モードでレンダリングします。
- ドメインが以下のリストに入っている
- IE8: res://iecompat.dll/iecompatdata.xml (IEからアクセス!)
- IE9: http://ie9cvlist.ie.microsoft.com/ie9CompatViewList.xml
- 互換表示設定>[マイクロソフトからの更新された Web サイト一覧を含める]がオンになっている
- デフォルトなので、ほとんどのユーザはオン
ある程度大きいサイトのドメインになると、この親切なリストに登録されていることがあります。そのため、ローカル開発環境では気付かずに、ステージング環境に上げたときに発覚したりします。
詳しくは、 互換表示一覧の概要 をどうぞ。
解決方法
- Microsoft に削除依頼
- metaタグ(
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
)を追加- 大抵の場合、こちらの対応になるが、UserAgent について注意が必要
- Google Chrome Frameの開発が終了 したので、
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
と書く必要が無くなったかなと思っています。
この場合は、上記の方法で解決してくださいな。ただし、
metaタグを使った解決をした場合は、以降 UserAgent に注意!!!!
例えば、<meta http-equiv="X-UA-Compatible" content="edge" />
を追加したページをIE9で見ると、
になります。ドキュメントモードは無事修正されましたが、 UserAgent を司るブラウザモードがIE9
でなく、IE9互換表示
です。つまり、IE9なのに、UserAgent が MSIE 9.0
が含まれなくなる。
参考: IE の互換機能ドキュメントモード・ブラウザモードの違い
IE8
IE9互換表示
この辺りの理不尽さを把握した上で、UA振り分けを書きましょう^^という、お話でした。