可能性のある複製:
IE7ブラウザーとIE7互換モードのブラウザーを区別する
かなり広範なシステムでIE8を完全にテストする時間はありませんでした。また、IE8の使用を禁止できない段階に達しています。私たちのユーザーは頑固で、ひどく洗練されていないので、「互換モード」ボタンを使用するように彼らに言うことができないと感じます。代わりに、「IE = EmulateIE7」メタタグをtemporary修正として追加します。
問題は、このタグが使用されている場合でも、ブラウザーがそれ自体をIE8であると報告し、それがその後、ページによって検出されて拒否されることです。サーバー側の検出がメタタグを取得できない理由は理解できます(メタタグが送信および処理される前に、サーバーには既にユーザーエージェントがある)が、クライアント側のチェックも失敗します。クライアントマシンで互換モードボタンをクリックした場合、ユーザーエージェントはIE7ですが、メタタグを使用した場合はそうではありません。
これは、とりわけ、チェックを無効にする必要があることを意味します。そのため、どこかで間違いを犯し、ページにメタタグを追加し忘れた場合、ページが破損します。
他の誰かがこれに遭遇し、より良いアプローチを考え出しましたか?モードがメタタグによって設定されている場合、IE8が互換モードで実行されていることを検出する方法はありませんか?
そして、すべてのページをIE8標準モードと互換性があるようにする必要があるという有効な考え方があることは知っていますが、現実には、これは現実的な選択肢ではありません(そして、 IEの非標準的な方法で作成する必要があった)のバージョンを4つまたは5つ作成しませんでした。
IE8では、互換モードに関係なく、User-Agent文字列にトライデントトークンが含まれています。
詳細については、MSDNを参照してください: http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-Explorer-8-user-agent-string-updated-edition.aspx
Windows Vista上のIE7
Mozilla/4.0(互換性あり;MSIE 7.0; Windows NT 6.0)
Windows Vista上のIE8(互換表示)
Mozilla/4.0(互換性あり;MSIE 7.0; Windows NT 6.0;Trident/4.0)
Windows Vista上のIE8
Mozilla/4.0(互換性あり;MSIE 8.0; Windows NT 6.0;Trident/4.0)
実際のIE8モードでは8、IE7モードでは7の値を持つdocument.documentModeの値を確認する必要があります。ユーザーエージェント文字列はどちらの場合も同じで、IE8と表示されます。このJavaScript変数はIE8でのみ使用できることに注意してください。
参考までに、互換モードを検出する方法(別名互換ビューを検出する方法)の詳細については、次のリンクの表示を検討してください...
http://msdn.Microsoft.com/en-us/library/cc288325(VS.85).aspx
...役立つ情報が表示されます。
FacebookなどのIE8エミュレーションブラックリストサイトからサイトにアクセスするリンクを処理する場合、問題は実際にはさらに複雑になります。
Facebookの共有リンクにより、リンクがポップアップで開きます-デフォルトでチェックされている互換性表示設定で「更新のウェブリストを含める」がチェックされている場合、ポップアップウィンドウはFacebookからのブラックリストリファラーを表示し、ウィンドウをブラックリストで開きます最初はモード。 Trident\4.0のバックグラウンドで検出すると、値が表示され、下位レベルのCSSが設定されます。
ただし、ブラウザがロードされると、ブラウザは互換モードから切り替わり、更新せずに標準モードに変わります。したがって、標準モードに割り当てられたCSSが間違っています。
解決策-IEブラウザの互換モードを解除します。そうです-奇妙に思えますが、必要がない場合は、なぜユーザーをサイトのダウンレベルに移行させるのですか?.
ダウンレベルと同様に、IE = EmulateI7を設定してブラウザーを強制的にダウンさせ、IE = EmulateIE8を追加して、ユーザーにIE8 Standardでページを表示させることができます。このモードでは、互換表示を選択する機能も削除され、そのモードでのテストの必要性が減少します
「IE8互換モードの検出」ではありませんが、次のように役立つ場合もあります。
サーバー自体にアクセスできる場合は、HTTPヘッダーを送信できます。これについては、 Mike Ormondのブログ を参照してください。 IISでのメタスイッチの実装 のMSDNページには、ヘッダーとヘッダーの設定/送信方法の詳細があります。