如何仅使用 JavaScript 定位 Internet Explorer 11?
Posted
技术标签:
【中文标题】如何仅使用 JavaScript 定位 Internet Explorer 11?【英文标题】:How can I target only Internet Explorer 11 with JavaScript? 【发布时间】:2013-07-01 02:33:30 【问题描述】:使用 javascript 仅针对 IE11 最不容易出错的方法是什么?
注意:这实际上应该只用于分析或告知用户他们正在使用的浏览器。对于其他一切,还有特征检测。
【问题讨论】:
搜索“IE11 user-agent”会给你博文和这篇文章大家都看过:nczonline.net/blog/2013/07/02/… @dystroy 该博文似乎没有任何检测代码。尽管它确实有 IE11 的(当前)UA,但很多人不知道如何测试它。 作为参考,这里是关于IE10的同一个问题:***.com/questions/9900311/… IE11 有几个用户代理字符串:blogs.msdn.com/b/ieinternals/archive/2013/09/21/… 重新打开 - 由于某种原因,过去重新打开此问题的所有投票最终都过期了,并且有 很多 个重新打开投票。不用说,离开这些严厉的 cmets 的人是问题的一部分,他们选择抱怨而不是实际做任何事情来尝试重新提出问题。将来,如果尽管您尽最大努力引起社区的关注,但您的问题仍未重新打开,并且您强烈希望重新打开它,请随时将其标记为版主注意,解释您的情况,我们将有一个看。 【参考方案1】:IE11 在它的 UA 字符串中保留“Trident”,但会丢弃 MSIE。检测浏览器是否为IE11或以上(IE12、IE13等)的简单方法是:
var isAtLeastIE11 = !!(navigator.userAgent.match(/Trident/) && !navigator.userAgent.match(/MSIE/));
如果您想要只 IE11(并且您不希望将来的 IE 版本匹配),请执行以下操作:
var isIE11 = !!(navigator.userAgent.match(/Trident/) && navigator.userAgent.match(/rv[ :]11/));
【讨论】:
修订由冒号分隔,所以不是 rv:11 谢谢。看起来MS改变了这一点。我已经更新了正则表达式。【参考方案2】:试试这个,
navigator.sayswho= (function()
var N= navigator.appName, ua= navigator.userAgent, tem;
var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
return M;
)();
来源Browser detection in JavaScript?
为 IE=11
更新使用这个
var isIE11 = navigator.userAgent.match(/Trident\/7.0; rv 11.0/);
阅读此http://msdn.microsoft.com/en-us/library/ie/bg182625%28v=vs.85%29.aspx
【讨论】:
【参考方案3】:var isIE11 = !!navigator.userAgent.match(/Trident\/7.0; rv 11/);
来源:http://www.nczonline.net/blog/2013/07/02/internet-explorer-11-dont-call-me-ie/
【讨论】:
在 win 7 上,IE 11 抛出错误。 这对我来说在 IE 11 上也是错误的 这可能是由于正则表达式中的点必须被转义。【参考方案4】:IE 11 的用户代理字符串目前是这个:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko
Windows 10 示例:
Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko
这意味着您可以简单地测试,对于 11.xx 版本,
var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent);
作为IE10 user agent was
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
现在Trident/X
应该是真正的版本控制这一事实可能也是安全的。
【讨论】:
trident是MShtml版本,rv是IE版本 我通过 modern.ie 和 IE 11.0.9600.x 虚拟使用 IE,在 rv 和版本号之间实际上有一个冒号,而不是空格:Mozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko
不得不切换到这个正则表达式:!!navigator.userAgent.match(/Trident.*rv[ :]?11\./)
在 win 7 上,IE 11 抛出错误。
如何检查“如果 IE11 及更高版本”?这行得通吗? !!navigator.userAgent.match(/Trident.*rv[ :]?[1-9]2\./)
正则表达式不是我的强项,但出于兼容性原因使用它,如果它是 IE12、IE13 等,我希望代码在我的 if 语句中执行。
注意:这将不适用于 64 位 Windows 8.1 更新并启用兼容性视图的桌面版 IE11。见msdn.microsoft.com/en-us/library/ie/hh869301%28v=vs.85%29.aspx【参考方案5】:
这会将ie
设置为IE 的版本,如果没有则设置为0。它适用于 1 到 11,但如果 Microsoft 放弃 Trident 引擎,则可能无法检测到未来的版本。
var ie = 0;
try ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ];
catch(e)
您可能还对我的相关,更详细的答案here感兴趣。
【讨论】:
这是最适合我的小脚本。它针对所有 IE 版本。它不针对我不需要的Edge。 :) 谢谢@Beejor!【参考方案6】:我使用以下模式来定位所有 IE 浏览器。如果您只需要 IE 11,则可以将其缩短。
/msie|trident|edge/g.test(navigator.userAgent.toLowerCase());
祝你好运!
弗雷德里克
【讨论】:
【参考方案7】:这是一个可用于检测任何浏览器的脚本:
<script>
// Opera
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) return p.toString() === "[object SafariRemoteNotification]"; )(!window['safari'] || safari.pushNotification);
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;
// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;
if (isFirefox==true)
alert(isFirefox)
$('.container-fluid').css("overflow-y":"auto","height":"150%");
</script>
【讨论】:
以上是关于如何仅使用 JavaScript 定位 Internet Explorer 11?的主要内容,如果未能解决你的问题,请参考以下文章
异步功能仅在定位ECMAScript 2015或更高版本时可用