JavaScript中的浏览器检测 – 错误?

这是检测器: http://w3schools.com/js/tryit.asp?filename=try_nav_all

在Chrome,Firefox,Safari和netscape中,它始终将浏览器代号显示为Mozilla,将浏览器名称显示netscape.不应该根据浏览器改变?

以下是代码和不同的输出,如果您有兴趣:

码:

document.write("browser CodeName: " + navigator.appCodeName);
document.write("<br /><br />");
document.write("browser Name: " + navigator.appName);
document.write("<br /><br />");
document.write("browser Version: " + navigator.appVersion);
document.write("<br /><br />");
document.write("Cookies Enabled: " + navigator.cookieEnabled);
document.write("<br /><br />");
document.write("Platform: " + navigator.platform);
document.write("<br /><br />");
document.write("User-agent header: " + navigator.userAgent);

色彩输出

browser CodeName: Mozilla

browser Name: netscape

browser Version: 5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML,like Gecko) Chrome/8.0.552.224 Safari/534.10

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML,like Gecko) Chrome/8.0.552.224 Safari/534.10

FIREFOX输出

browser CodeName: Mozilla

browser Name: netscape

browser Version: 5.0 (Windows; es-ES)

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12

SAFARI输出

browser CodeName: Mozilla

browser Name: netscape

browser Version: 5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML,like Gecko) Version/5.0.3 Safari/533.19.4

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML,like Gecko) Version/5.0.3 Safari/533.19.4

网络输出

browser CodeName: Mozilla

browser Name: netscape

browser Version: 5.0 (Windows; en-US)

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.7.2) Gecko/20040804 netscape/7.2 (ax)

解决方法

也许这应该取决于他们想要实现的目标.

但它只是说明了为什么浏览器检测已经变得无礼,有利于特征检测.浏览器检测码的时间不可思议.另一方面,特征检测是相当永恒的.

例如:我可以检查浏览器是否为IE,如果是,则假定浏览器没有Array.prototype.indexOf.但IE9来了,并添加了它,但像一个杯子我仍然使用我自己的版本,因为我认为“IE”没有它.更好的实际检查,看看它是否存在于我正在运行的实现,没有太多关心什么品牌.当然,功能检测将与我从未听说过的浏览器配合使用浏览器检测将失败,并返回一些完全arbirary“认”.

有时候,它不像做一个if(Array.prototype.indexOf)那么直接,但通常是可能的. Juriy Zaytsev(kangax)拥有a great list的特征检测功能.

(旁注:几乎所有浏览器声称(在某种程度上)他们是“Mozilla”,因为一些网站容易地喜欢netscape浏览器(是的,很久以前)到微软浏览器,并且正在进行浏览器检测来检查.)

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...