Internet Explorer 11检测


125

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

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

我已尝试使用为此问题指定的答案来检测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');

有人对此有想法吗?


@Bobkhin我在上面提到了我的问题。遇到错误Object not found and needs to be re-evaluated.
Miqdad Ali 2014年


Answers:


188

编辑2016年11月18日

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

var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
  // true on IE11
  // false on Edge and other IEs/browsers.

原始答案

为了检查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"

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"

所以我们可以做:

/x64|x32/ig.test(window.navigator.userAgent)

这将仅对ie11返回true。


1
@简 是。在整个情况下,只有IE11会返回true。我只是表明<11返回false。
罗伊·纳米尔

1
@IanSteffy这只是为了显示操作的结果(!)。您可以打开一个HTML文件并添加脚本标签,然后在该脚本中运行命令。在这里运行
罗伊·纳米尔

2
x64返回Chrome和Edge
Gene R

3
等等,有一个IE12吗?我以为IE11是最后一个,我们很快就不必再担心那个愚蠢的浏览器了!☹
迈克尔Scheper

1
难道不是我的IE 11.0.9600.19431在Windows 7企业工作。没有window.MSInputMethodContext
Heinrich Ulbricht

105

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

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

2
第二个不indexOf()应该> -1吗?
进行了改革

是的,我不知道为什么它是> 0而不是> -1,但是“ Trident /”仍然在appVersion字符串中显示得更远
chrismarx

22

我使用以下功能来检测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
}  

21

以上所有答案都忽略了您没有窗口或导航器的事实:-)

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

那就是它说的地方

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

以及导航器,窗口,控制台,它们都不存在,需要重新评估。我已经在仿真中做到了。只需关闭并打开控制台几次。


5
谢谢您实际阅读问题并通过重新评估回答问题。
marknadal

8
也为我工作。这就是IE死后在世界各地举行聚会的原因。
voltrevo '16

关闭和打开控制台对我有用。与Firefox或Chrome相比,行为奇怪(但实际上是IE,因此很明显。)

7

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

if(window.msCrypto) { /* I'm IE11 for sure */ }

或类似的东西
var IE11= !!window.msCrypto;


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


唯一可行的解​​决方案(这是最短,最干净和最优雅的解决方案)!Royi Namir的 /x64|x32/ig.test(window.navigator.userAgent)也适用于Firefox!
的SándorZuboly

4

以及我如何实施

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

1
我认为您的功能有错字。首先,您要进行条件检查,这是不使用的。第二,也许你是说&& "ActiveXObject" in window。第三:双重否定的诀窍是什么!!
dma_k '16

1
!! 几乎意味着“强制布尔”。
安德鲁·格雷

4

好吧,尝试此操作,简单,适用于IE11和IE 11以下版本

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

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

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

console.log('Is IE Browser : '+ browserIsIE)


2

该链接很有帮助。它包含用于检测IE11之前所有版本的javascript代码。我使用IE11仿真器测试了脚本。要找到IE11仿真器,请在Web浏览器上单击鼠标右键,然后单击“检查元素”。在页面的左下角,向下滚动导航栏,然后单击桌面图标。“用户代理字符串”下拉框包含模拟IE6-11的选项。

有用。在写这个答案之前,我只是用了几分钟。无法发布快照-信誉不足。


这是代码-单击链接再次查看:

// Get IE or Edge browser version
var version = detectIE();

if (version === false) {
  document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
  document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
  document.getElementById('result').innerHTML = 'IE ' + version;
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // IE 10
  // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';

  // IE 11
  // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';

  // Edge 12 (Spartan)
  // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';

  // Edge 13
  // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';

  var msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var edge = ua.indexOf('Edge/');
  if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  }

  // other browser
  return false;
}
@import url(https://fonts.googleapis.com/css?family=Fira+Mono|Fira+Sans:300);
body {
  color: black;
  background-color: white;
  font-family: "Fira Sans", sans-serif;
  font-weight: 300;
  margin: 0;
  padding: 3rem;
}

h1 {
  color: darkgrey;
  text-align: center;
  font-weight: 300;
  font-size: 1.5rem;
  line-height: 2rem;
}

h2 {
  text-align: center;
  font-weight: 300;
  font-size: 4rem;
}

p {
  color: darkgrey;
  text-align: center;
  font-family: "Fira Mono", monospace;
  font-size: 1rem;
  line-height: 1.5rem;
}
<h1>Detect IE/Edge version with JavaScript.<br> Updated to recognize Internet Explorer 12+ aka Edge.</h1>
<h2 id="result">detecting…</h2>
<p id="details">n/a</p>


1

使用此RegExp似乎适用于IE 10和IE 11:

function isIE(){
    return /Trident\/|MSIE/.test(window.navigator.userAgent);
}

我没有比IE 10更旧的IE对此进行测试。


0

使用导航器:-

navigator是包含了客户端计算机的浏览器中的所有信息的对象。

navigator.appName 返回客户端计算机的浏览器的名称。

navigator.appName === 'Microsoft Internet Explorer' ||  !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) || (typeof $.browser !== "undefined" && $.browser.msie === 1) ? alert("Please dont use IE.") : alert("This is not IE")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
appName是IE 11上的Netscape。他们竭尽所能欺骗开发人员。
kagronick

0

我发现IE11在不同的环境中提供了多个用户代理字符串。

与其依赖MSIE,以及其他方法,不如依赖Trident版本

const isIE11 = userAgent => userAgent.match(/Trident\/([\d.]+)/) ? +userAgent.match(/Trident\/([\d.]+)/)[1] >= 7;

希望这可以帮助 :)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.