20

JavaScriptを介してWebサイトにアクセスしているときに、IE 11互換モードがオンになっているかどうかを確認する方法を知っている人はいますか?

リスト互換表示設定にURLを追加しました。しかし、私がするとき

navigator.userAgent

開発者ツールでは、それを返します

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; rv :11.0) ヤモリみたい

マイクロソフトの Web サイト ( http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx ) を見ると、

互換性のある (「互換性のある」) トークンとブラウザー (「MSIE」) のトークンは削除されました。

ページが JavaScript を介して互換表示を使用しているかどうかを検出するためのヘルプは、非常に役立ちます。前もって感謝します。

4

7 に答える 7

26

解決した

この質問に対する回答を自分で探しているときに、別のスレッドで Nenad Bulatovic からこの解決策を見つけましたが、彼の回答は正解としてマークされていませんでした。これを IE11 でテストし、IE5 にダウングレードしたところ、IE7 ~ IE11 で動作することがわかりました。これは素晴らしいことです。他の誰かが役に立つと思った場合に備えて、ここで共有したいと思いました。

iecheck.js

function trueOrFalse() {
    return true;
}

function IeVersion() {
    //Set defaults
    var value = {
        IsIE: false,
        TrueVersion: 0,
        ActingVersion: 0,
        CompatibilityMode: false
    };

    //Try to find the Trident version number
    var trident = navigator.userAgent.match(/Trident\/(\d+)/);
    if (trident) {
        value.IsIE = true;
        //Convert from the Trident version number to the IE version number
        value.TrueVersion = parseInt(trident[1], 10) + 4;
    }

    //Try to find the MSIE number
    var msie = navigator.userAgent.match(/MSIE (\d+)/);
    if (msie) {
        value.IsIE = true;
        //Find the IE version number from the user agent string
        value.ActingVersion = parseInt(msie[1]);
    } else {
        //Must be IE 11 in "edge" mode
        value.ActingVersion = value.TrueVersion;
    }

    //If we have both a Trident and MSIE version number, see if they're different
    if (value.IsIE && value.TrueVersion > 0 && value.ActingVersion > 0) {
        //In compatibility mode if the trident number doesn't match up with the MSIE number
        value.CompatibilityMode = value.TrueVersion != value.ActingVersion;
    }
    return value;
}

iecheck.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Testing IE Compatibility Mode</title>
    <script src="iecheck.js" type="text/javascript"></script>
</head>
<body>
<div id="results">Results: </div>
</br>
<script type="text/javascript">

var ie = IeVersion();

document.write("IsIE: " + ie.IsIE + "</br>");
document.write("TrueVersion: " + ie.TrueVersion + "</br>");
document.write("ActingVersion: " + ie.ActingVersion + "</br>");
document.write("CompatibilityMode: " + ie.CompatibilityMode + "</br>");

</script>
</body>
</html>

ソース: IE10 互換モードの検出

于 2016-01-21T16:19:30.227 に答える
8

これを行うための JavaScript 関数ie-truthを作成しました。IE 11 で互換モードがオンになっている場合、ユーザー エージェント文字列には IE 11 (7.0) の Trident バージョン番号と古いバージョンの IE の MSIE バージョン番号 (IE の 7.0 など) が含まれます。 7)。これは、古いバージョンの IE の互換モードにも当てはまります。

于 2015-02-05T14:21:31.507 に答える
7

これを web.config ファイルに追加すると、アプリケーションはユーザーの設定を上書きします。

<configuration>
  ...
  <system.webServer>
    ...
    <httpProtocol>
        <customHeaders>
          <clear/>
          <add name="X-UA-Compatible" value="IE=8; IE=9; IE=EDGE" />
        </customHeaders>
    </httpProtocol>
    ...
  </system.webServer>
  ...
</configuration>

「system.webServer」タグを web.config ファイルの末尾の「configuration」タグの直前に配置します。さらに、Web サイトを選択して [HTTP 応答ヘッダー] アイコンをクリックすると、Web サーバーの IIS に X-UA-Compatible タグを追加できます。

于 2016-12-12T12:14:12.957 に答える