てきとうなメモ

本の感想とか技術メモとか

ドキュメントモードをサイト表示時に自動的に設定する

古い社内WebシステムをIE11で表示しようとすると描画がおかしくなったりJSが正常に動かなかったりする。その場合、開発者ツールを起動して、ドキュメントモードを変更することで対応するのだが、毎回設定するのが面倒なので自動的に設定したい。

エンタープライズモードサイトリストを利用するとこのような処理を自動的に行うことができる。

サイトリストを有効にするためにはレジストリキー

HKCU\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode

を設定する。

SiteListの値を

C:¥EnterpriseMode.xml

などにして、このファイルを作成する。このファイルはEnterprise Site List Managerで作成できる。

Addボタンを押し、URLとどのドキュメントモードorエンタープライズモードで開くかを指定し、Saveボタンを押す。File->Save to XMLXMLに出力することができる。

出力されるファイルのフォーマットは以下のようになっている。

<rules version="0">
  <docMode>
    <domain docMode="8">www.example.com</domain>
  </docMode>
</rules>

この場合www.example.comにアクセスした場合はドキュメントモード8で開くことになる。ドメイン単位で指定しているが、path要素を用いてパス単位での設定もできる。

フォーマットについてはこちらに書かれてある。またSite List Managerをダウンロードする時にスキーマファイルEMIESiteList.xsdを一緒にダウンロードできる。

XMLなので手書きで修正することもできるが、その場合情報を更新した時にversion属性の値をインクリメントしないといけない。IE

HKCU\Software\Microsoft\Internet Explorer\Main\EnterpriseMode

のCurrentVersionに前回読み込んだversion属性を保存し、この値とSiteListのファイルの値を比較し大きくなっていないと読み込まないようである。バージョンのインクリメントはSite List Managerを使った場合は勝手にやってくれるようだ。

さらに起動してすぐに読み込むのではなく65秒後に読み込むというよくわからない実装になっている。

サイト一覧を最新の状態に保つため、Internet Explorer を開いた後 65 秒間待ってから、HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\EnterpriseMode\ レジストリ キーの CurrentVersion 値がファイル内のバージョン番号と一致することを確認します。

https://msdn.microsoft.com/ja-jp/library/dn640696.aspx

あと気をつけないといけないのはDOCTYPEによっては強制的にQuirksモード(IE5のモード)になってしまうことだ。

DOCTYPEがなかったり、

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

ではなく

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

のような形式であった場合は強制的にQuirksモードになるようだ。

参考
IE Enterprise Mode in a Nutshell - NoTime - Site Home - MSDN Blogs