[解決済み] JavaScriptを使用しています。IE7やIE8の互換モードでIE9を検出することはできますか?
質問
ユーザーエージェント文字列を介して 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 つとなります。
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
関連
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトを表示するにはどうすればよいですか?
-
[解決済み】X-UA-CompatibleをIE=edgeに設定しても、互換モードが止まらない。
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] ECMAScriptとは?
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]