IE11通过javascript检测兼容性视图是否为ON

时间:2015-01-12 23:06:34

标签: javascript internet-explorer-11 ie-compatibility-mode

有没有人知道如何通过javascript检查网站上的IE 11兼容模式是否为ON?

我将网址添加到列表兼容性视图设置中。但是当我做的时候

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

查看微软网站(http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx),它说

  

兼容("兼容")和浏览器(" MSIE")令牌已被   除去。

有关检测页面是否通过javascript使用兼容性视图的任何帮助都会非常有用。提前谢谢。

7 个答案:

答案 0 :(得分:20)

<强>解决

在我自己寻找这个问题的答案时,我在另一个帖子中找到了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>

来源:Detect IE10 compatibility mode

答案 1 :(得分:7)

我写了一个JavaScript函数ie-truth来做这件事。工作原理是在IE 11中,如果打开了兼容模式,则用户代理字符串将包含IE 11(7.0)的Trident版本号以及旧版IE的MSIE版本号(例如7.0 for IE 7)。这也适用于旧版IE中的兼容模式。

答案 2 :(得分: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>

放置&#34; system.webServer&#34;在关闭&#34;配置&#34;之前的web.config文件末尾标记。标签。此外,您可以通过选择您的网站并单击HTTP Response Headers图标,在您的网络服务器上的IIS中添加X-UA兼容标签。

答案 3 :(得分:1)

我建议使用功能检测,而不是间接查询浏览器版本。因此,例如,如果您需要HTML 5历史记录API功能,请执行以下操作:

.img {
    display: inline-block;
    margin-left: 30px;
}

答案 4 :(得分:0)

根据user agentIE Compatibility Cookbook文章,您可以判断启用了compat模式,但只有当用户代理字符串合作时才有效。

具体来说,如果浏览器令牌显示MSIE 7.0并且Trident令牌显示为Trident/7.0,则这是一个非常明确的指示。尽管如此,自IE11 RTM以来对UA字符串的更改表明,在未来的版本中,您不能 - 也不应该 - 依赖它作为可预测的资源。

要详细了解各个令牌,请参阅Understanding user-agent strings主题。 (这不完全是最新的,但似乎与您的兴趣有关。)

希望这会有所帮助......

- Lance

答案 5 :(得分:0)

reliable solution你可以edit适用于Internet Explorer 8到11(需要额外的代码来支持&lt; IE8)。

令人讨厌的副作用(仅当IE <11或documentMode&lt; 11 - ouch)时才会出现:

  • 这将cause problems//@ sourceMappingURL=xx.js一起使用(例如,在jQuery&lt; 1.11中,或其他未更新为较新//#格式的库)。
  • 显然@cc_on大大减慢了js的评价(知道他的东西的保罗爱尔兰人)。

它起作用的基本原因是:

var ieRealVersion = Function('return /*@cc_on @_jscript_version@*/;')();
无论兼容模式如何,

都会返回IE的真实版本。注意:

  • 在IE11模式下IE11未定义ieRealVersion,但在这种情况下为document.documentMode == 11。
  • ieRealVersion对于IE8是5.8。
  • ieRealVersion对于IE7是5.7,对于IE6 SP3也是5.7。但是documentMode是未定义的,所以你需要额外的代码来检测实际的浏览器(相当简单,但我不再支持IE6 / 7,所以我没有费心去编码)。
  • 这是一种可靠的方式来嗅探我多年来使用过的Internet Explorer 6-10没有任何问题(但由于@cc_on导致了其他问题)。

答案 6 :(得分:0)

一个简单的解决方案,请在控制台中尝试:

# input for temperatures
temperatures = [1, 4, 4.3,6]

# empty output list
output_list = []

for temperature in temperatures:
    if not 0 <= temperature <= 5:
        output_list.append(temperature)
# print the output_list
print(output_list)

将检测小于IE9的任何IE(包括兼容性视图)。 还会根据犬只检测到Chrome 4-14。

IE 6-8:支持选择事件,但不支持window.getSelection() 参考:https://caniuse.com/#feat=selection-api