Javascript 检测IE10兼容模式

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14791619/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 17:56:11  来源:igfitidea点击:

Detect IE10 compatibility mode

javascriptjqueryhtmlinternet-explorerinternet-explorer-10

提问by ABC

I have some specific code paths for IE 10 and rest of the IE versions. If IE10 is running in compatibility mode, browser version is set to 7.0. Is there a way to detect if it is IE 10 irrespective of the standard/compatibility mode using JavaScript/JQuery?

我有一些适用于 IE 10 和其余 IE 版本的特定代码路径。如果 IE10 在兼容模式下运行,则浏览器版本设置为 7.0。无论使用 JavaScript/JQuery 的标准/兼容模式如何,有没有办法检测它是否是 IE 10?

采纳答案by ABC

Trident value in the user agent string indicates the actual version of IE being run.

用户代理字符串中的 Trident 值表示正在运行的 IE 的实际版本。

回答by Sergei Grebnov

You can detect this using the navigator.userAgentstring, for example

例如,您可以使用navigator.userAgent字符串检测这一点

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Zune 4.7)"

"Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.2;WOW64; Trident/6.0;.NET4.0E;.NET4.0C;InfoPath.3;.NET CLR 3.5.30729;.NET CLR 2.0.50727;.NET CLR 3.0.30729;Zune 4.7)"

Trident/6.0 means IE10

Trident/6.0 意味着 IE10

MSIE 7.0 means compatibility mode

MSIE 7.0 表示兼容模式

More details: https://stackoverflow.com/a/5825518/255654

更多详情:https: //stackoverflow.com/a/5825518/255654

回答by Nenad Bulatovic

This should work detect compatibility mode for MSIE.

这应该可以检测 MSIE 的兼容模式。

iecheck.js

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

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>

回答by Ben

This is what I use from JQuery .ready

这是我从 JQuery .ready 中使用的

  $(document).ready(function () {
    var iec = new IECompatibility();
    alert('IsIE: ' + iec.IsIE + '\nVersion: ' + iec.Version + '\nCompatability On: ' + iec.IsOn);
  });

  function IECompatibility() {
    var agentStr = navigator.userAgent;
    this.IsIE = false;
    this.IsOn = undefined;  //defined only if IE
    this.Version = undefined;

    if (agentStr.indexOf("MSIE 7.0") > -1) {
      this.IsIE = true;
      this.IsOn = true;
      if (agentStr.indexOf("Trident/6.0") > -1) {
        this.Version = 'IE10';
      } else if (agentStr.indexOf("Trident/5.0") > -1) {
        this.Version = 'IE9';
      } else if (agentStr.indexOf("Trident/4.0") > -1) {
        this.Version = 'IE8';
      } else {
        this.IsOn = false; // compatability mimics 7, thus not on
        this.Version = 'IE7';
      }
    } //IE 7
  }

Ben Hobgood

本·霍布古德