Internet Explorer 11检测

Miq*_*Ali 107 javascript internet-explorer internet-explorer-11

我知道IE 11具有与所有其他IE不同的用户代理字符串

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko
Run Code Online (Sandbox Code Playgroud)

我试图用这个问题的答案检测IE 11'

Jquery无法检测到IE 11

那是 !!navigator.userAgent.match(/Trident\/7\./)

但我收到了错误 Object not found and needs to be re-evaluated.

然后我在IE11中打开开发者控制台并尝试访问一些预定义的javascript对象,我仍然得到相同的错误.

我试过了

navigator.userAgent

window.navigator

console.log('test');

有人对此有任何想法吗?

Roy*_*mir 165

2016年11月18日编辑

此代码也适用(对于那些喜欢其他解决方案而不使用ActiveX的人)

var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
  // true on IE11
  // false on Edge and other IEs/browsers.
Run Code Online (Sandbox Code Playgroud)

原始答案

为了检查Ie11,您可以使用:(已测试)

(或运行)

!(window.ActiveXObject) && "ActiveXObject" in window

我有IE的所有VMS:

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

注意:这不适用于IE11:

正如你在这里看到的,它返回true:

在此输入图像描述

所以,我们能做些什么 :

显然,他们添加了机器位空间:

ie11:

"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; rv:11.0) like Gecko"
Run Code Online (Sandbox Code Playgroud)

ie12:

"Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"
Run Code Online (Sandbox Code Playgroud)

所以我们可以这样做:

/x64|x32/ig.test(window.navigator.userAgent)
Run Code Online (Sandbox Code Playgroud)

这将仅对ie11返回true.

  • 等等,有 IE12 吗?我以为 IE11 是最后一个,我们很快就不必再担心那个愚蠢的浏览器了!☹ (3认同)
  • `x64` 返回 Chrome 和 Edge (2认同)
  • **不适用于** Windows 7 Enterprise 上的 IE 11.0.9600.19431。没有“window.MSInputMethodContext”。 (2认同)

Epo*_*okK 95

要快速检测MSIE(从版本6到11):

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}
Run Code Online (Sandbox Code Playgroud)

  • 不应该第二个`indexOf()`是`> -1`? (2认同)

com*_*ike 21

所有上述答案都忽略了你提到你没有窗口或导航器的事实:-)

然后我在IE11中打开开发者控制台

这就是它所说的

找不到对象,需要重新评估.

和导航器,窗口,控制台,它们都不存在,需要重新评估.我在仿真中有这个.关闭并打开控制台几次.

  • 也为我工作过.这就是为什么IE死后会在世界各地聚会的原因. (7认同)
  • 善良亲切感谢您真正阅读问题并通过重新评估来回答问题. (4认同)

Ken*_*nyE 20

我使用以下函数来检测IE的版本9,10和11:

function ieVersion() {
    var ua = window.navigator.userAgent;
    if (ua.indexOf("Trident/7.0") > -1)
        return 11;
    else if (ua.indexOf("Trident/6.0") > -1)
        return 10;
    else if (ua.indexOf("Trident/5.0") > -1)
        return 9;
    else
        return 0;  // not IE9, 10 or 11
}  
Run Code Online (Sandbox Code Playgroud)


j.j*_*.j. 16

检测IE 11 的一种非常安全且简洁的方法是

if(window.msCrypto) {
    // I'm IE11 for sure
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西

var IE11= !!window.msCrypto;
Run Code Online (Sandbox Code Playgroud)

msCryptowindow.crypto对象的前缀版本,仅在 IE 11 中实现。
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


Dup*_*ngh 9

好的试试这个,简单,适用于 IE11 和 11 版本以下的 IE

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;
Run Code Online (Sandbox Code Playgroud)

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1IE 11 版本 IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1以下版本

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;
Run Code Online (Sandbox Code Playgroud)


Miq*_*Ali 5

我是如何实现这一点的

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>
Run Code Online (Sandbox Code Playgroud)

  • !! 几乎意味着“强制布尔值”。 (2认同)