14

クライアントのブラウザがIE7であるか、IE7互換モードのIE9であるかを区別できますか?私は自分のサイトでJSチェックを実行できるかどうかを調べようとしています。これにより、2つの異なることを認識し、結果に応じて異なることを実行できます。

  1. そのブラウザはIE7です
  2. そのブラウザはIE7互換モードです

私は最初の条件が正しく機能しています。それはどこでもそれを行う方法がほとんど言われているからです。2番目のものおよび/または両方の組み合わせについてはよくわかりません。

4

5 に答える 5

8

少なくともIE8とIE9の場合navigator.userAgent、サブストリングが含まTridentれているかどうかを確認できます。IE8 +のユーザーエージェントには常にがありTridentますが、IE7にはありません。この回答その中のMSDNリンクを参照してください。

IE10は扱いにくいようです。以下のコメントで報告されていますが、IE7エミュレーションモードでは常にTrident存在するとは限りません。IE7が利用可能なプラットフォームでIE10が利用できない場合、おそらくOS文字列(例)はIE10を明らかにします。Windows NT 6.2

User-AgentHTTPヘッダーが常に一致するとは限らないことにも注意してくださいnavigator.userAgent。これは、少なくとも互換性モードがオンになっている(IE7User-Agentヘッダーを送信する)がIE=Edge、応答のようなものを検出する( navigator.userAgentIE9に戻る)IE9の場合です。

于 2012-09-06T08:38:03.917 に答える
7

ユーザーのブラウザが互換モードになっているかどうかを検出する方法はないと思います。ユーザーエージェント文字列はブラウザモードによって決定され、ドキュメントモードはx-ua-compatibleメタタグ(またはヘッダー)の存在、または場合によっては使用されるDoctypeによって決定されます。

互換モードは、古くて時代遅れの機能やハッキングに依存するページから現代のブラウザユーザーを保護することを目的としていました。それは実際にはあなたがテストしたいものではありません。代わりに、互換モードまたは非互換モードのいずれかでブラウザが理解できる標準準拠のコードを記述してください。

さまざまなブラウザモードとドキュメントモードのさまざまな結果を次に示します。

ブラウザモード:IE10互換ビュー/ドキュメントモード:IE7標準

navigator.userAgent
 
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; 
.NET4.0E; .NET4.0C; Media Center PC 6.0; .NET CLR 3.5.30729; 
.NET CLR 2.0.50727; .NET CLR 3.0.30729; BRI/2)" 

document.documentMode

7

ブラウザモード:IE7 /ドキュメントモード:IE7標準

navigator.userAgent

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; .NET4.0E; 
.NET4.0C; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; 
.NET CLR 3.0.30729; BRI/2)"

document.documentMode

7

ご覧のとおり、これら2つの方法では、ユーザーが互換性のあるビューであるかどうかを判断する方法はありません。

Compatビューリストのオーバーライド

x-ua-compatibleサイトが互換表示リストに表示されている場合は、独自のヘッダーを提供することで、推奨されるレンダリングオプションを上書きできます。

<meta http-equiv="x-ua-compatible" content="IE=9" />

これにより、ブラウザは強制的にIE9標準モードになります(Doctypeの評価はありません)。IE=edge可能な限り最新のモード(Internet Explorer10ではIE10標準)にするために使用できますが、これはお勧めしません。代わりに、テストした最新のモードに設定してください。

x-ua-compatibleヘッダーがIE10に設定されているが、ユーザーが以前のブラウザーでページにアクセスした場合、最も近いレンダリングエンジンが使用されます。たとえば、ユーザーがIE9を使用してページにアクセスし、メタタグがブラウザーにIE10を使用するように指示した場合、ブラウザーはIE9標準モードにフォールバックします。

IE=9これにより、ブラウザがIE9標準モードになることに注意してください。必ずしもブラウザがIE9のように動作するわけではありません。ブラウザをIE9のように動作させたい場合は、次のEmulateIE9コンテンツを使用します。

<meta http-equiv="x-ua-compatible" content="IE=EmulateIE9" />

これにより、ブラウザはDOCTYPEが存在する場合はフォールバックして、ドキュメントモードが標準かQuirksかを判断します。

詳細については、ドキュメントの互換性の定義を参照してください。

于 2012-04-18T16:31:10.003 に答える
3

グーグルでこのスレッドに到達する人のために、ここに別のオプションがあります:

http://www.quirksmode.org/js/detect.htmlにあるスクリプトを使用しています...。

if (BrowserDetect.browser == 'Explorer')
{
    if (document.documentMode == 7 && BrowserDetect.version > 7)
    {
        // user is running IE in compatability mode
    }
}
于 2012-12-05T20:38:51.880 に答える
2

これは私のために働きます:

/**
 * Actual IE8-Browser running in IE8-Compat-Mode or IE7 Mode?
 */
MyUtils.isIE8CompatMode= function(){
    if($.browser.msie && navigator.userAgent.indexOf('MSIE 7.0')>=0){
        return true;
    }
    return false;
}

実際のIE8ブラウザーには、3つのドキュメントモード(IE7、IE8、および癖)と3つのブラウザーモード(IE7、IE8、およびIE8-互換性)があります。次の方法で、Document-ModeをIE8に強制できます。

 <meta http-equiv="X-UA-Compatible" content="IE=8,chrome=1"/>

ただし、ブラウザの構成によって決定されるブラウザモードを強制することはできません。例:一部のお客様は、[互換モード]-[互換モード]-[互換性-表示]-[設定]-[ダイアログ]のチェックボックスをオンにしています。その場合、私たちはそれについて何もすることができません。

このサイトの非常に啓発的な図を参照してください。

-> ie8が互換モードを決定する方法

上記の関数は何に使用しますか?互換モードではページにいくつかの不具合が表示されるため、ユーザーに、なぜ見栄えが悪いのか、そしてユーザーがそれに対して何ができるのかを伝える必要があります。そのため、上記の関数を使用して問題が発生しているかどうかを確認し、ユーザーに小さな警告を表示します。

ie9およびie10の互換性モードでは、アプリは正常に表示されるため、必要ありません。この応答は、この質問に対する回答と見なすことができます。これの複製としてマークされたie8互換モードを検出します。おそらくそれは誰かを助けます。

于 2013-08-09T14:43:30.527 に答える
0

これは、サンノゼに拠点を置く大規模なオークションサイトに対して行ったかなり防弾のチェックです。

var userAgentString = navigator.userAgent;

if(/MSIE 7\.0/gi.test(userAgentString) && /Trident/gi.test(userAgentString)){
    // compatibility mode
    // .... code goes here ....
}
于 2015-01-07T01:23:35.147 に答える