当我想检测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” . 我怎样才能发现它?
15 回答
我在带滚动条的元素处使用了
onscroll
事件 . 在IE中触发时,我添加了以下验证:我已经阅读了你的答案并做了一个混合 . 它似乎适用于Windows XP(IE7 / IE8)和Windows 7(IE9 / IE10 / IE11) .
当然,如果我返回0,则表示没有IE .
我正在使用一种更简单的方法:
导航器全局对象具有属性接触点,在Internet Exlorer 11中称为msMaxTouchPoints .
所以如果你寻找:
您将找到Internet Explorer 11 .
使用
!(window.ActiveXObject) && "ActiveXObject" in window
显式检测IE11 .要检测任何IE(pre-Edge,"Trident")版本,请改用
"ActiveXObject" in window
.试试这个:
方案:
使用
MSInputMethodContext
作为特征检测检查的一部分 . 例如:References
MSInputMethodContext Object
Input Method Editor API
What I’d like to see in IE12: Internet Explorer 12 Wishlist of Bug Fixes and New Features
TypeScript/lib.dom.d.ts at master · Microsoft/TypeScript IE DOM APIs
这似乎是一种更好的方法 . 如果没有匹配,“indexOf”返回-1 . 它不会覆盖正文上的现有类,只需添加它们即可 .
从User-Agent获取IE版本
How it works: 用户代理字符串for all IE versions包括“MSIE空间版本" or "三叉戟其他文本rv空格或冒号版本”部分 . 知道这一点,我们从
String.match()
正则表达式中获取版本号 .try-catch
块用于缩短代码,否则我们需要测试非IE浏览器的数组边界 .Note: 如果用户将浏览器设置为"compatibility mode",则可能会欺骗或省略用户代理,有时会无意中 . 虽然这在实践中似乎不是一个问题 .
在没有User-Agent的情况下获取IE版本
How it works: 每个版本的IE都添加了对以前版本中找不到的_220352的支持 . 因此,我们可以自上而下的方式测试功能 . 这里使用ternary序列是为了简洁起见,尽管
if-then
和switch
语句也可以正常工作 . 变量ie
设置为整数5-11,对于较旧的设置为1,对于较新/非IE设置为99 . 如果您只想准确测试IE 1-11,可以将其设置为0 .Note: 如果您的代码在包含第三方脚本的页面上运行,对象检测可能会中断,这些脚本会为
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 .Angular JS就是这样做的 .
msie will be positive number if its IE and NaN for other browser like chrome,firefox.
为什么?
从Internet Explorer 11开始,用户代理字符串已发生显着变化 .
参考:
msdn #1 msdn #2
仅适用于IE浏览器:
使用警报(即);
测试:
Update 01 Jun 2017
现在我们可以使用更简单,更简单的东西:
坦率地说,我会说使用一个可以满足你需要的库(比如platform.js) . 在某些时候,事情会发生变化,图书馆将配备这些更改,使用正则表达式进行手动解析将失败 .
感谢上帝IE走了......
根据this list of changes,IE11不再报告为
MSIE
,故意避免错误检测 .如果你真的想知道IE,那么你可以做的就是检测用户代理中的
Trident/
字符串,如果navigator.appName
返回Netscape
,就像(未经测试的);请注意,IE11(afaik)仍处于预览状态,用户代理可能会在发布前更改 .
用以下方法检测大多数浏览器:
https://gist.github.com/earlonrails/5266945