LoginSignup
19
16

More than 5 years have passed since last update.

UserAgentからIEの互換モードを判別する

Posted at

レガシーブラウザをブロックしているようなWebページにて
IE7はブロックしたいけどIEの互換モードであれば利用させたい時にどうしたらいいか調べてみました。
結果的にUserAgentで判別出来る事が分かったのでまとめておきます。

まずはMSIEを確認

IEの場合にはUAに含まれるMSIEという識別子からバージョンが判別できます。
これは広く知られている手法ですね。

続いてTridentを確認

IE8以降はMSIEだけでなくTridentという識別子が含まれるようになっており、こちらでもバージョンが判別できます。

ちょっと実際のUAを見てみましょう。

IE9だとこんな感じです

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Trident => 5はIE9に該当します。

MSIEとTridentの関係は以下のようになります。

IE MSIE Trident
8 8 4
9 9 5
10 10 6
11 11 7

互換モード使用時のUA

互換モードを使用するとこの関係に変化が現れます。

ではIE11で互換モードを使用した場合のUAを見てみましょう。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; InfoPath.3; GWX:DOWNLOADED; GWX:RESERVED; GWX:QUALIFIED)

Tridentは互換モード使用前後で変わりませんが、MSIEは互換後のバージョンになっているのが分かります。

互換モードを使用した時のMSIEとTridentの関係は以下のようになります。

IE MSIE Trident
8 (互換モード) 7 4
9 (互換モード) 7 5
10 (互換モード) 7 6
11 (互換モード) 7 7

互換モードの判定方法

「Trident == 7」かつ「MSIE != 11」=> 互換モード
「Trident == 6」かつ「MSIE != 10」=> 互換モード
「Trident == 5」かつ「MSIE != 9」=> 互換モード という具合。

ちなみに僕が検証した端末では互換モードを使用するとどれもIE7として振る舞うようだったので
「Tridentが含まれる」かつ「MSIE == 7」=> 互換モード と判別しても良いかも。

19
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16