如何仅使用 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或更高版本时可用

如何在科尔多瓦 Android 应用程序中仅定位平板设备

仅使用 css 更改顺序和定位

如何使用 javascript 定位 Edge 浏览器

如何使用 Jquery 或 Javascript 定位附加元素,或者如何将该附加元素添加到 DOM?

如何正确使用 Javascript 来定位 Shiny 中的 gt 表行元素