UserAgentからIEの互換モードを判別する
レガシーブラウザをブロックしているような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」=> 互換モード と判別しても良いかも。
Author And Source
この問題について(UserAgentからIEの互換モードを判別する), 我々は、より多くの情報をここで見つけました https://qiita.com/sasakure-kei/items/6d645e43103abd39010e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .