Internet Explorer 11 检测
Posted
技术标签:
【中文标题】Internet Explorer 11 检测【英文标题】:Internet Explorer 11 detection 【发布时间】:2014-03-16 12:25:09 【问题描述】:我知道 IE 11 的用户代理字符串与所有其他 IE 不同
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko
我已尝试检测 IE 11 并为此问题指定了答案'
Jquery fail to detect 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.
How to detect IE 11 with javascript in Asp.net的可能重复
How to detect IE11? 的可能副本
【参考方案1】:
2016 年 11 月 18 日编辑
此代码也可以工作(对于那些喜欢另一种解决方案,不使用 ActiveX 的人)
var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
// true on IE11
// false on Edge and other IEs/browsers.
原答案
为了检查 Ie11 ,你可以使用这个:(经过测试)
(或运行this)
!(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。
【讨论】:
@Jan.是的。对于整个情况,只有 IE11 会返回 true。我刚刚展示了 @IanSteffy 这只是为了显示操作的结果(!)。您可以打开 html 文件并添加脚本标记并在该脚本中运行命令。 Here run this.x64
同时返回 Chrome 和 Edge
等等,有 IE12 吗?我以为 IE11 是最后一个,我们很快就不必再担心那个愚蠢的浏览器了! ☹
不是否适用于我在 Windows 7 Enterprise 上的 IE 11.0.9600.19431。没有window.MSInputMethodContext
。【参考方案2】:
快速检测 MSIE(从版本 6 到 11):
if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1)
/* Microsoft Internet Explorer detected in. */
【讨论】:
第二个indexOf()
不应该是> -1
吗?
是的,我不知道为什么它是 >0 而不是 >-1,但是“Trident/”无论如何都会在 appVersion 字符串中显示得更远-
这个答案没有检测到 IE 11,这是 OP 所要求的
为什么不同时使用 >= 0
或 > -1
?应该是相同的结果,但更易读/更直接。
请注意 appVersion 已弃用:developer.mozilla.org/en-US/docs/Web/API/Navigator/appVersion【参考方案3】:
我使用下面的函数来检测 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
【讨论】:
【参考方案4】:以上所有答案都忽略了您提到您没有窗口或导航器的事实:-)
然后我在 IE11 中打开了开发者控制台
这就是它说的地方
找不到对象,需要重新评估。
还有导航器、窗口、控制台,它们都不存在,需要重新评估。我在仿真中遇到过。只需关闭并打开控制台几次。
【讨论】:
天哪,感谢您实际阅读问题并通过重新评估回答问题。 也为我工作。这就是为什么当 IE 消亡时,世界各地都会举行派对。 关闭和打开控制台对我有用。与 Firefox 或 Chrome 相比的奇怪行为(但它是 IE,所以数字。)【参考方案5】:检测仅IE 11的一种非常安全且简洁的方法是
if(window.msCrypto)
// I'm IE11 for sure
或类似的东西
var IE11= !!window.msCrypto;
msCrypto
是 window.crypto
对象的前缀版本,仅在 IE 11 中实现。https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto
【讨论】:
唯一可行的解决方案(这是最短、最干净、最优雅的解决方案)! Royi Namir 的/x64|x32/ig.test(window.navigator.userAgent)
也适用于 Firefox!
谢谢,我使用了相反的方法:if(window.crypto)
,因为在@types
中没有检测到msCrypto
【参考方案6】:
好的,试试这个,简单,适用于 IE11 和 IE 11 以下版本
browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;
navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1
用于 IE 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)
【讨论】:
【参考方案7】:以及我是如何实现的
<script type="text/javascript">
!(window.ActiveXObject) && "ActiveXObject"
function isIE11()
return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
</script>
【讨论】:
我认为你的函数中有错字。首先,您进行未使用的条件检查。其次,也许你的意思是&& "ActiveXObject" in window
。第三:双重否定!!
有什么技巧?
!!几乎意味着“强制转换为布尔值”。【参考方案8】:
This link was helpful 。它包含 javascript 代码来检测所有版本的 IE,直到 IE11。我用 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>
【讨论】:
【参考方案9】:使用这个 RegExp 似乎适用于 IE 10 和 IE 11:
function isIE()
return /Trident\/|MSIE/.test(window.navigator.userAgent);
我没有 IE 10 之前的 IE 来测试这个。
【讨论】:
【参考方案10】:使用导航器:-
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>
【讨论】:
appName 是 IE 11 上的 Netscape。他们尽其所能欺骗开发人员。【参考方案11】:我发现 IE11 在不同的环境中提供了多个用户代理字符串。
与其依赖MSIE
等方式,不如依赖Trident
版本
const isIE11 = userAgent => userAgent.match(/Trident\/([\d.]+)/) ? +userAgent.match(/Trident\/([\d.]+)/)[1] >= 7;
希望这会有所帮助:)
【讨论】:
【参考方案12】:为了最简单的方法,直到 IE 于 2021 年 8 月 17 日正式死亡 ?✌️? 我正在反向使用 IE 条件语句<!--[if !IE]> --><!-- <![endif]-->
。
<style>
:rootdisplay:none!important
</style>
<!--[if !IE]> -->
<style>
:rootdisplay:initial!important
</style>
<!-- <![endif]-->
【讨论】:
以上是关于Internet Explorer 11 检测的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Internet Explorer 或 Microsoft Edge 中检测到触摸
检测旧的 Internet Explorer Javascript 函数(< ES6)
如何仅使用 JavaScript 定位 Internet Explorer 11?
html 使用HTML检测Internet Explorer