当我想检测IE时,我使用此代码:
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
function checkVersion()
{
var msg = "You're not using Internet Explorer.";
var ver = getInternetExplorerVersion();
if ( ver > -1 )
{
msg = "You are using IE " + ver;
}
alert( msg );
}
但IE11正在返回“你没有使用Internet Explorer”。我该如何检测它?
答案 0 :(得分:213)
IE11不再报告MSIE
,根据this list of changes,它有意避免错误检测。
如果真的想要知道它,你可以做什么IE是在Trident/
返回navigator.appName
时检测用户代理中的Netscape
字符串,某事喜欢(未经测试的);
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
else if (navigator.appName == 'Netscape')
{
var ua = navigator.userAgent;
var re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
console.log('IE version:', getInternetExplorerVersion());
请注意,IE11(afaik)仍处于预览状态,用户代理可能会在发布前更改。
答案 1 :(得分:84)
使用!(window.ActiveXObject) && "ActiveXObject" in window
明确检测IE11。
要检测任何IE(pre-Edge,“Trident”)版本,请改用"ActiveXObject" in window
。
答案 2 :(得分:35)
使用MSInputMethodContext
作为功能检测检查的一部分。例如:
//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;
<强>参考强>
答案 3 :(得分:15)
我已经阅读了你的答案并做了一个混合。它似乎适用于Windows XP(IE7 / IE8)和Windows 7(IE9 / IE10 / IE11)。
function ie_ver(){
var iev=0;
var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var rv=navigator.userAgent.indexOf("rv:11.0");
if (ieold) iev=new Number(RegExp.$1);
if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
if (trident&&rv!=-1) iev=11;
return iev;
}
当然,如果我返回0,则表示没有IE。
答案 4 :(得分:11)
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
工作原理:用户代理字符串for all IE versions包含部分&#34; MSIE 空间 版本&# 34;或&#34; Trident 其他文本 rv space-or-colon 版本&#34;。知道这一点,我们从String.match()
正则表达式中获取版本号。 try-catch
块用于缩短代码,否则我们需要测试非IE浏览器的数组边界。
注意:如果用户已将浏览器设置为&#34;兼容模式,则有时会无意中欺骗或省略用户代理。虽然这在实践中似乎不是一个很大的问题。
var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 :
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 :
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );
工作原理:每个版本的IE都添加了对以前版本中找不到的additional features的支持。因此,我们可以自上而下的方式测试功能。此处使用ternary序列是为了简洁,但if-then
和switch
语句也可以正常工作。变量ie
设置为整数5-11,对于较旧的设置为1,对于较新/非IE设置为99。如果您只想准确测试IE 1-11,可以将其设置为0.
注意:如果您的代码在包含第三方脚本的页面上运行,对象检测可能会中断,这些脚本会为document.addEventListener
之类的内容添加polyfill。在这种情况下,用户代理是最佳选择。
如果您只对浏览器是否支持大多数HTML 5和CSS 3标准感兴趣,您可以reasonably assume IE 8及更低版本仍然是主要的问题应用。对window.getComputedStyle
的测试将为您提供相当好的现代浏览器组合(IE 9,FF 4,Chrome 11,Safari 5,Opera 11.5)。 IE 9极大地改进了标准支持,但原生CSS动画需要IE 10。
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );
答案 5 :(得分:9)
Angular JS就是这样做的。
msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}
msie将是正数,如果它的IE和NaN用于其他浏览器,如chrome,firefox。
为什么?从Internet Explorer 11开始,用户代理字符串发生了重大变化。
参考:
答案 6 :(得分:7)
解决方案:
function GetIEVersion() {
var sAgent = window.navigator.userAgent;
var Idx = sAgent.indexOf("MSIE");
// If IE, return version number.
if (Idx > 0)
return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));
// If IE 11 then look for Updated user agent string.
else if (!!navigator.userAgent.match(/Trident\/7\./))
return 11;
else
return 0; //It is not IE
}
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){
alert("This is IE " + GetIEVersion());
}else {
alert("This no is IE ");
}
&#13;
答案 7 :(得分:3)
我正在使用更简单的方法:
导航器全局对象有一个属性接触点,在Internet Exlorer 11中称为msMaxTouchPoints。
所以,如果你寻找:
navigator.msMaxTouchPoints !== void 0
您将找到Internet Explorer 11。
答案 8 :(得分:2)
var ua = navigator.userAgent.toString().toLowerCase();
var match = /(trident)(?:.*rv:([\w.]+))?/.exec(ua) ||/(msie) ([\w.]+)/.exec(ua)||['',null,-1];
var rv = match[2];
return rv;
答案 9 :(得分:2)
试试这个:
var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var net = !!navigator.userAgent.match(/.NET4.0E/);
var IE11 = trident && net
var IEold = ( navigator.userAgent.match(/MSIE/i) ? true : false );
if(IE11 || IEold){
alert("IE")
}else{
alert("Other")
}
答案 10 :(得分:1)
这似乎是一种更好的方法。 &#34;的indexOf&#34;如果没有匹配则返回-1。它不会覆盖身体上的现有类,只需添加它们。
// add a class on the body ie IE 10/11
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
document.body.className = document.body.className+' ie11';
}
if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
document.body.className = document.body.className+' ie10';
}
答案 11 :(得分:0)
使用此功能检测大多数浏览器:
var getBrowser = function(){
var navigatorObj = navigator.appName,
userAgentObj = navigator.userAgent,
matchVersion;
var match = userAgentObj.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
if( match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) match[2] = matchVersion[1];
//mobile
if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
return match ? [match[1], match[2], mobile] : [navigatorObj, navigator.appVersion, mobile];
}
// web browser
return match ? [match[1], match[2]] : [navigatorObj, navigator.appVersion, '-?'];
};
答案 12 :(得分:0)
我在带滚动条的元素处使用了onscroll
事件。在IE中触发时,我添加了以下验证:
onscroll="if (document.activeElement==this) ignoreHideOptions()"
答案 13 :(得分:0)
仅适用于IE浏览器:
var ie = 'NotIE'; //IE5-11, Edge+
if( !!document.compatMode ) {
if( !("ActiveXObject" in window) ) ) ie = 'EDGE';
if( !!document.uniqueID){
if('ActiveXObject' in window && !window.createPopup ){ ie = 11; }
else if(!!document.all){
if(!!window.atob){ie = 10;}
else if(!!document.addEventListener) {ie = 9;}
else if(!!document.querySelector){ie = 8;}
else if(!!window.XMLHttpRequest){ie = 7;}
else if(!!document.compatMode){ie = 6;}
else ie = 5;
}
}
}
使用警报(即);
测试:
var browserVersionExplorer = (function() {
var ie = '<s>NotIE</s>',
me = '<s>NotIE</s>';
if (/msie\s|trident\/|edge\//i.test(window.navigator.userAgent) && !!(document.documentMode || document.uniqueID || window.ActiveXObject || window.MSInputMethodContext)) {
if (!!window.MSInputMethodContext) {
ie = !("ActiveXObject" in window) ? 'EDGE' : 11;
} else if (!!document.uniqueID) {
if (!!(window.ActiveXObject && document.all)) {
if (document.compatMode == "CSS1Compat" && !!window.DOMParser ) {
ie = !!window.XMLHttpRequest ? 7 : 6;
} else {
ie = !!(window.createPopup && document.getElementById) ? parseFloat('5.5') : 5;
}
if (!!document.documentMode && !!document.querySelector ) {
ie = !!(window.atob && window.matchMedia) ? 10 : ( !!document.addEventListener ? 9 : 8);
}
} else ie = !!document.all ? 4 : (!!window.navigator ? 3 : 2);
}
}
return ie > 1 ? 'IE ' + ie : ie;
})();
alert(browserVersionExplorer);
现在我们可以使用更简单,更简单的方法:
var uA = window.navigator.userAgent,
onlyIEorEdge = /msie\s|trident\/|edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
checkVersion = (onlyIEorEdge && +(/(edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
答案 14 :(得分:0)
坦率地说,我会说使用一个可以满足你需要的库(比如platform.js)。在某些时候,事情会发生变化,图书馆将配备这些变更,使用正则表达式进行手动解析将会失败。
感谢上帝IE消失......
答案 15 :(得分:0)
使用DetectOS.js。这是一个简单的 JS 定义,适用于流行的操作系统和浏览器,没有依赖:
class DetectOS {
constructor() {
this.browser = this.searchString(this.dataBrowser())
this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion)
this.OS = this.searchString(this.dataOS())
}
searchString(data) {
for (let i = 0; i < data.length; i++) {
let
dataString = data[i].string,
dataProp = data[i].prop
this.versionSearchString = data[i].versionSearch || data[i].identity
if (dataString) {
if (dataString.indexOf(data[i].subString) !== -1) {
return data[i].identity
}
} else if (dataProp) {
return data[i].identity
}
}
}
searchVersion(dataString) {
let index = dataString.indexOf(this.versionSearchString)
if (index === -1) return
return parseFloat(dataString.substring(index+this.versionSearchString.length + 1))
}
dataBrowser() {
return [
/***************
* Chrome
***************/
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
/***************
* Safari
***************/
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
/***************
* For Older Opera (12.18-)
***************/
{
prop: window.opera,
identity: "Opera",
versionSearch: "Version"
},
/***************
* Internet Explorer 10
***************/
{
string: navigator.userAgent,
subString: "MSIE",
identity: "IE10",
versionSearch: "MSIE"
},
/***************
* Internet Explorer 11
***************/
{
string: navigator.userAgent,
subString: "Trident",
identity: "IE11",
versionSearch: "rv"
},
/***************
* Edge
***************/
{
string: navigator.userAgent,
subString: "Edge",
identity: "Edge",
versionSearch: "Edge"
},
/***************
* Firefox
***************/
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
/***************
* For Older Netscapes (4-)
***************/
{
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
},
/***************
* For Newer Netscapes (6+)
***************/
{
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
/***************
* Other Browsers
***************/
{
string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
}
]
}
dataOS() {
return [
{
string: navigator.platform,
subString: 'Win',
identity: 'Windows'
},
{
string: navigator.platform,
subString: 'Mac',
identity: 'macOS'
},
{
string: navigator.userAgent,
subString: 'iPhone',
identity: 'iOS'
},
{
string: navigator.userAgent,
subString: 'iPad',
identity: 'iOS'
},
{
string: navigator.userAgent,
subString: 'iPod',
identity: 'iOS'
},
{
string: navigator.userAgent,
subString: 'Android',
identity: 'Android'
},
{
string: navigator.platform,
subString: 'Linux',
identity: 'Linux'
}
]
}
}
const Detect = new DetectOS()
console.log("We know your browser – it's " + Detect.browser + " " + Detect.version);
console.log("We know your OS – it's " + Detect.OS);
console.log("We know everything about you.");