Internet Explorer 11检测

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

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

我已经尝试检测 IE11与指定的答案为这个问题’

Jquery 未能检测到 IE11

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

但是我出错了 Object not found and needs to be re-evaluated.

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

我试过了

navigator.userAgent

window.navigator

console.log('test');

有人知道吗?

196307 次浏览

编辑: 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:

enter image description here

enter image description here

enter image description here

enter image description here

注意: 这不适用于 IE11:

正如你们看到的,它返回真值:

enter image description here

那么我们能做什么:

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

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"

第十二条:

"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。

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

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

以及我是如何实施的

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

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

以上所有答案都忽略了一个事实,那就是你提到你没有窗口或导航器: -)

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

上面写着

对象未找到,需要重新计算。

导航器,窗口,控制台,它们都不存在,需要重新评估。我已经模仿过了。只要关闭和打开控制台几次。

使用这个 RegExp 似乎对 IE10和 IE11很有效:

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

我没有一个 IE 老于 IE 10来测试这一点。

这个链接很有帮助。它包含检测 IE11以下所有版本的 IE 的 javascript 代码。我用 IE11模拟器测试了脚本。要查找 IE11模拟器,请右键单击网页浏览器上的“检查元素”。在页面的左下角,向下滚动导航栏并单击桌面图标。“用户代理字符串”下拉框包含模拟 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>

使用导航:-

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>

一个相当安全和简洁的检测 只有 IE11的方法是

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

或者类似的东西

var IE11= !!window.msCrypto;

msCryptowindow.crypto对象的前缀版本,仅在 IE11中实现。
Https://developer.mozilla.org/en-us/docs/web/api/window/crypto

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

与其依赖于 MSIE和其他方法,不如依赖于 Trident版本

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

希望这对你有帮助:)

好的,试试这个,简单的,对于 IE11和 IE 低于11的版本

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

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

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


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

对于一个最小的方法,直到 IE 在2021年8月17日正式死亡。我正在使用反向的 If判断语句。

<style>
:root{display:none!important}
</style>
<!--[if !IE]> -->
<style>
:root{display:initial!important}
</style>
<!-- <![endif]-->