web-dev-qa-db-ja.com

IE11は、javascriptを介して互換表示がオンかどうかを検出します

IE 11互換モードがオンになっていて、JavaScriptを使用してWebサイトにアクセスしているときにチェックする方法を知っている人はいますか?

リストの互換表示設定に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)Geckoのような

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

互換(「互換」)およびブラウザ(「MSIE」)トークンは削除されました。

ページがjavascriptを介して互換ビューを使用しているかどうかを検出するためのヘルプは、本当に役立ちます。前もって感謝します。

18
slee

[〜#〜] solved [〜#〜]

この質問に対する答えを自分で探している間、私は別のスレッドで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互換モードを検出

22
jaegs

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

これを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タグを追加できます。

7
Kris Truyens

ブラウザーのバージョンを間接的に照会するのではなく、機能検出を使用することをお勧めします。したがって、たとえば、HTML 5履歴API機能が必要な場合は、次のようにします。

if (window.history && window.history.pushState) {
    console.log('This is a SUPPORTED browser');
} else {
    console.log('NO! You require a browser that does X, please try installing ...');
}
1
geekdenz

簡単な解決策は、コンソールで試してください:

if (typeof(window.getSelection) == "undefined") {
   alert("Unsupported browser!");
} else {
   alert("Supported browser");
}

IE9(互換表示を含む)よりも小さいIEを検出します。また、カヌーに応じてChrome 4-14を検出します。

IE 6-8:選択イベントをサポートしますが、window.getSelection()をサポートしませんRef: https://caniuse.com/#feat=selection-api

0
user1775054

IE Compatibility Cookbookユーザーエージェント の記事によると、ユーザーエージェント文字列が連携している場合にのみ、互換モードが有効になっていることを確認する方法があります。

具体的には、ブラウザトークンがMSIE 7.0とTridentトークンはTrident/7.0、それはかなり明確な指標です。それでも、IE11 RTM以降のUA文字列の変更は、将来のバージョンでは予測可能なリソースとして信頼できないことを示しています。

個々のトークンの詳細については、 ユーザーエージェント文字列について トピックを参照してください。 (それは完全に最新ではありませんが、そこにあるものはあなたの興味に関連しているようです。)

お役に立てれば...

-ランス

0
Lance Leonard

信頼できる解決策 できます 編集 Internet Explorer 8から11で動作します(<IE8をサポートするために追加のコードが必要です)。

不快副作用(IE <11またはdocumentMode <11-ouch)の場合のみ):

  • これは 問題の原因//@ sourceMappingURL=xx.js(たとえば、jQuery <1.11、または新しい//#形式に更新されていない他のライブラリ)。
  • どうやら@cc_onはjs評価を劇的に遅くします(彼のことを知っているPaul Irish)。

動作する基本的な理由は次のとおりです。

var ieRealVersion = Function('return /*@cc_on @_jscript_version@*/;')();

互換モードに関係なく、IEの実際のバージョンを返します。注:

  • ieRealVersionはIE11モードのIE11では未定義ですが、その場合はdocument.documentMode == 11です。
  • iE8のieRealVersionは5.8です。
  • ieRealVersionはIE7では5.7、IE6 SP3では5.7です。ただし、documentModeは未定義であるため、実際のブラウザーを検出するために追加のコードが必要です(かなり簡単ですが、IE6/7はもうサポートしていませんので、それをコーディングすることはありません)。
  • これは何年も問題なく使用してきたInternet Explorer 6-10をスニッフィングするための信頼できる方法です(ただし、@ cc_onにより他のユーザーに問題を引き起こしました)。
0
robocat