如何使用javascript定位IE9及以上版本?

时间:2013-09-25 18:18:31

标签: javascript internet-explorer browser-detection

我知道IE11改变了发送navigator.userAgent的方式,我见过this response。如果我们所需要的只是IE11及以上版本,那么效果很好,但我们需要IE9及以上版本。我曾经读过某个地方,在IE9中引入了Trident代码名称,但对IE8的快速测试表明,那里的用户代理也包含Trident。

我的正则表达不是很好;如何拆分这些字符串以确定Trident/和下面的分号之间的内容,以便我可以判断我正在处理哪个版本? (请不要告诉我使用特征检测;这不是一个选项。)

IE 8:

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BO1IE8_v1;ENUS)"

IE 9:

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)" 

我现有的代码(不能捕获IE8)如下所示:

if (navigator.userAgent.match(/Trident/)) {
   // it's supported; do stuff
}

基本上,我正试图从IE9获取5.0,从IE8获取4.0。

1 个答案:

答案 0 :(得分:1)

  

我的正则表达不是很好;如何拆分这些字符串以确定Trident /和下面的分号之间的内容,以便我可以判断我正在处理哪个版本?

您想要使用捕获组并获取数组的第二个元素,这将为您提供捕获的部分。

var stringAfterTrident = navigator.userAgent.match(/Trident([^;]+);/)[1];
//should return ["Trident/5.0;", "/5.0"] and you want the second item of the array

/Trident([^;]+);/基本上是从Trident开始,在分号之前捕获一个或多个不是分号的字符。