1. ホーム
  2. javascript

[解決済み] JavaScriptを使用しています。IE7やIE8の互換モードでIE9を検出することはできますか?

2023-04-06 07:25:07

質問

ユーザーエージェント文字列を介して IE7 または IE8 であると識別しているブラウザが、本当にそれらのブラウザなのか、あるいは 7 または 8 互換モードの IE9 なのかを知る必要があります。

ユーザー エージェント文字列を見る限り、IE7 互換モードの IE9 は、本物の IE7 と同じ文字列を提供します。偽装された IE9 であるかどうかを確認するためにテストできる特別なプロパティ/要素/オブジェクトはありますか?

私のスクリプトが読み込まれたページは、癖のある設定を強制するか、特定の設定を強制する可能性があるため、ドキュメント モードが役に立たないと仮定しています。

IE9 には、7、8、9 モードに関係なく存在し、テスト可能な何らかのプロパティがあることを期待しています。


編集で追加...

OK、私が今どこで間違っていたのかがわかりました。私は、"Browser Mode" ドロップダウンを使用して、IE8 と IE7 に切り替え、これがそれぞれ "IE8 互換モードと "IE7 互換モードであると考えていました。もちろん、これは事実ではありません。開発者ツールのブラウザ モードでは、本当に古いブラウザのように切り替えるので、元のユーザーエージェント文字列が報告されるのは当然のことです。

ブラウザ モードを IE9 または IE9 互換性のままにして、代わりにドキュメント モードのドロップダウン バリアントを試してみると、実際には 8 つの組み合わせ (2 つのブラウザ モードと 4 つのドキュメント モード) すべてで "Trident/5.0" が表示されました。ブラウザ モード IE7 と IE8 を選択しないようにする必要があります。

ですから、ページ、非開発者のユーザー、meta タグ、Microsoft の互換性リストが、IE9 をこの識別不可能な状態にすることはありえません。

を使うだけで if(navigator.userAgent.indexOf("Trident/5")>-1) を使うだけで十分です。

心配しないでください、これはスタイル、書式設定、ロジック、ページコンテンツのためのものではありません。それらのために機能検出を使用しています。IE9 を (どのようなモードであるかにかかわらず) 検出し、それについてページ コンテンツ以外の判断を下す必要があるだけです。

あなたの提案とリンクで答えに導いてくれてありがとうございます。

どのように解決するのですか?

IE7 互換モードで実行した場合、IE9 ではユーザーエージェント文字列が異なるため、IE のバージョンを区別するための最良の方法の 1 つとなります。

IE9 のユーザー エージェント文字列の紹介 :

IE8 と同様に、IE9 の互換性モードは、IE7 の標準モードにマッピングされます。 ビューは IE7 の標準モードにマッピングされます。 であり、IE9 の UA 文字列は 互換表示になったときの IE9 の UA 文字列は次のようになります。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)

互換表示では、IE9 はアプリケーションを通して は IE7 として報告されます。 バージョン番号 (Mozilla/4.0) と バージョン トークン (MSIE 7.0) を通じて、IE7 として報告されます。これは 互換性のためです。 インクリメントされた Trident トークンは、'Trident/4.0' から 'Trident/5.0' へと増加します。 Trident/5.0」まで増加し、ウェブサイトが で動作しているIE9を区別することができます。 と IE8 を区別できるようになりました。 表示 .

(となっています(強調は私が行いました)。つまり、ユーザー エージェント文字列は、自分自身が "Mozilla/4.0" および MSIE 7.0 であると報告するのと同じですが、IE9 は常に Trident/5.0 になります - MSIE 7.0, MSIE 8.0 または MSIE 9.0 と言っても関係ありません。

実際、あなたはこの素晴らしいまとめをチェックすべきです。 ブラウザー ID (ユーザーエージェント) 文字列 あるいは、さらに良い ユーザーエージェント文字列.com