我知道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。
答案 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开始,在分号之前捕获一个或多个不是分号的字符。