您可以使用以下检查(使用特征检测)明确检测IE11:
if (Object.hasOwnProperty.call(window, "ActiveXObject") && !window.ActiveXObject) {
}
Explanation: 所有版本的IE(除了非常旧的版本)都存在 window.ActiveXObject 属性。然而,IE11将此属性隐藏在DOM中,该属性现在为 undefined。但是,该属性本身存在于对象中,因此检查属性是否存在会在所有IE版本中返回true,但在IE11中,它也会对第二次检查返回false。最后,在IE8(以及我认为更早的版本)中,由于 window 不是 Object 的实例并且没有 hasOwnProperty 方法,因此通过 Object 调用 hasOwnProperty。
Another method, using userAgent string:
var ua = window.navigator.userAgent;
var versionSplit = /[\/\.]/i;
var versionRe = /(Version)\/([\w.\/]+)/i;
var operaRe = /(Opera|OPR)[\/ ]([\w.\/]+)/i;
var ieRe = /(?:(MSIE) |(Trident)\/.+rv:)([\w.]+)/i;
var match = ua.match(operaRe) || ua.match(ieRe);
if (!match) {
return false;
}
if (Array.prototype.filter) {
match = match.filter(function(item) {
return (item != null);
});
} else {
for (var j = 0; j < match.length; j++) {
var matchGroup = match[j];
if (matchGroup == null || matchGroup == '') {
match.splice(j, 1);
j--;
}
}
}
var name = match[1].replace('Trident', 'MSIE').replace('OPR', 'Opera');
var versionMatch = ua.match(versionRe) || match;
var version = versionMatch[2].split(versionSplit);
如果其userAgent字符串未被伪造,这将检测到任何版本的IE。
在极少数情况下,您实际上需要像上面描述的浏览器检测。 在大多数情况下,首选特性检测方法。