Javascript 是否仅从userAgent提取浏览器名称?
我向用户展示了一条消息(用javascript实现),它遵循 您的浏览器太旧,无法查看我的页面。您当前正在运行: 后跟用户浏览器的名称 不幸的是,Javascript 是否仅从userAgent提取浏览器名称?,javascript,html,user-agent,Javascript,Html,User Agent,我向用户展示了一条消息(用javascript实现),它遵循 您的浏览器太旧,无法查看我的页面。您当前正在运行: 后跟用户浏览器的名称 不幸的是,navigator.userAgent通常如下所示: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center
navigator.userAgent
通常如下所示:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.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)
我唯一需要回吐的是MSIE 8.0
有没有一个正则表达式可以或多或少地给我一个理智的、愚蠢的、对用户代理字符串友好的清理?这适用于大部分处于野外的浏览器 要从userAgent获取浏览器名称和版本,您可以执行以下操作:
function identifyBrowser() {
var regexps = {
'Chrome': [ /Chrome\/(\S+)/ ],
'Firefox': [ /Firefox\/(\S+)/ ],
'MSIE': [ /MSIE (\S+);/ ],
'Opera': [
/Opera\/.*?Version\/(\S+)/,
/Opera\/(\S+)/
],
'Safari': [ /Version\/(\S+).*?Safari\// ]
},
re, m, browser, version;
userAgent = navigator.userAgent;
elements = 2;
for (browser in regexps)
while (re = regexps[browser].shift())
if (m = userAgent.match(re)) {
version = (m[1].match(new RegExp('[^.]+(?:\.[^.]+){0,' + --elements + '}')))[0];
return browser + ' ' + version);
}
}
不错的起点。。。那些吃古老黑莓和诺基亚的人呢?Konqueror用户、Lynx用户和Netscape用户呢?PS3浏览器用户?谷歌电视用户?我可以继续……公平地说,这可能要求太高了。现在有这样的东西()可以部分地实现(与我想展示的内容相匹配的部分可能是有点理智的匹配)。