IE9 以降 navigator.userAgent は X-UA-Compatible 指定に影響されます

現象
Internet Explorer 9 以降のバージョンにおいて、クライアント スクリプト navigator.userAgent プロパティで取得した文字列の "MSIE x.x" 部分と IE が実際に Web サーバーへ送る User-Agent ヘッダーの文字列の "MSIE x.x" 部分のバージョンが異なることがあります。この事象は、HTTP 応答ヘッダー、またはページ上の Meta タグにおいて X-UA-Compatible によるドキュメント モードの指定があった場合に発生します。

例えば、ページに <meta http-equiv="X-UA-Compatible" content="IE=7"> の Meta タグがあり、IE9 のブラウザー モードが [Internet Explorer 9.0] の場合、IE9 が Web サーバーに送信する User-Agent ヘッダーの文字列はブラウザー モードにしたがって "Mozilla/5.0 (compatible; MSIE 9.0; … Trident/5.0)" になりますが、navigator.userAgent プロパティは X-UA-Compatible 指定にしたがって "Mozilla/4.0 (compatible; MSIE 7.0; … Trident/5.0; …)" になります。

そのため 、クライアント スクリプトで IE のバージョンを取得する目的で navigator.userAgent プロパティの "MSIE X.0" 部分を判断条件にすると、実際のバージョンと異なる判断になる可能性があります。
原因
IE9 以降、navigator.userAgent および navigator.appVersion プロパティの戻り値は、X-UA-Compatible によるドキュメント モードの指定に応じて MSIE バージョンを返すように動作変更しました。

IE9 以前では、実際に Web サーバーへ送信する User-Agent ヘッダーと navigator.userAgent プロパティは同じ文字列であり、X-UA-Compatible によるドキュメント モードの指定の影響は受けません。
回避策
クライアント スクリプトで IE9 であるかどうかを判断する場合は、navigator.userAgent プロパティの "MSIE x.0" のサブストリングではなく、"Trident/x.0" のサブストリングを条件にします。IE9 の場合は "Trident/5.0" で、IE8 の場合は "Trident/4.0" 、IE7 以前では "Trident" の文字列を含みません。

また、クライアント スクリプトでページのドキュメント モードを取得したい場合は、navigator.userAgent プロパティではなく、document.documentMode プロパティを利用 します。
状況
この動作は仕様です。
詳細
ユーザー エージェント文字列を理解する
http://msdn.microsoft.com/ja-jp/library/ms537503.aspx

userAgent property
http://msdn.microsoft.com/en-us/library/ie/ms534712.aspx

ドキュメント互換性の定義
http://msdn.microsoft.com/ja-jp/library/cc288325.aspx

関連情報
プロパティ

文書番号:2762271 - 最終更新日: 09/29/2016 14:40:00 - リビジョン: 4.0

Windows Internet Explorer 9, Windows Internet Explorer 10

  • KB2762271
フィードバック