5

私は大規模なプロジェクトに取り組んでおり、ユーザーが IE で互換表示を使用しているかどうかを判断する必要があります。
私はそれを行うためにこのコードを使用しています。

var agentStr = navigator.userAgent;
var mode = null;
if (agentStr.indexOf("Trident/5.0") > -1) {
    if (agentStr.indexOf("MSIE 7.0") > -1)
        mode = "IE9CV";
    else
        mode = "IE9";
} else if (agentStr.indexOf("Trident/4.0") > -1) {
    if (agentStr.indexOf("MSIE 7.0") > -1)
        mode = "IE8CV";
    else
        mode = "IE8";
} else
    mode = "IE7";

問題は次
のとおりです: 1 - イントラネット環境では、クライアントのブラウザで [イントラネット サイトを互換表示で表示する] オプションがオンになっていますが、それについては何もできません。
互換表示

2 - スクリプトが互換ビューを検出するのに問題はありませんが、理由はわかりません。ページが IE 9互換ビューで読み込まれる場合、受け取るユーザー エージェントは次のとおりです。

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)

ページがIE9でロードされた場合とまったく同じです。

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)

私が受け取っているはずなのに

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)

IE9 互換表示用。
IE9互換ビューを強制すると(予想どおり)、この最後の結果が得られますが、それが自動的にロードされると、IE9標準と同じユーザーエージェントが送信されます。そのため、ユーザーが IE9 標準ビューまたは互換ビューを持っているかどうかを判断する方法がわかりません。

私が自分自身を明確にしたかどうかはわかりませんが、IE の大きなバグのように見えます。
どのように進めればよいですか?誰もこの問題を経験しましたか?

これは、状況をシミュレートする画面です。 互換表示

4

1 に答える 1

-1

互換モードは、ほとんどどこでも苦痛です! :)

ただし、ブラウザー エージェントはだまされやすく、一般的に信頼性が低いため、検出しないようにしてください。代わりに、「機能の検出」を試してください。

これを行うために使用できるライブラリがいくつかあります

編集: 互換表示が有効になっているユーザーがサイトにアクセスできないようにする必要がある場合は、<META> tag / HTTP header.を使用してそのモードを無効にすることができます。詳しくはこちらをご覧ください。

http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx

http://blogs.msdn.com/b/ie/archive/2008/06/10/introducing-ie-emulateie7.aspx

于 2012-12-13T17:08:36.497 に答える