Javascript中的浏览器检测---错误?

时间:2010-12-23 22:55:38

标签: javascript browser browser-detection

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

在Chrome,Firefox,Safari Netscape中,它始终显示浏览器代号为Mozilla,浏览器名称为Netscape。这不应该根据浏览器改变吗?

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

CODE:

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);

CHROME OUTPUT:

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 OUTPUT:

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 OUTPUT:

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

NETSCAPE OUTPUT:

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)

2 个答案:

答案 0 :(得分:11)

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

但它只是说明为什么浏览器检测已经声名狼借,支持功能检测。浏览器检测代码快速非常。另一方面,特征检测是相当永恒的。

例如:我可以检查浏览器是否为IE,如果是,则假设浏览器没有Array.prototype.indexOf。但随后IE9出现并添加它,但就像一个杯子我仍然使用我自己的版本因为我认为“IE”没有它。实际检查是否存在于我正在运行的实现中,而不关心它是什么品牌更好。当然,功能检测将适用于我从未听说过的浏览器;浏览器检测将失败,并回到某些完全的“默认”。

有时它并不像执行if (Array.prototype.indexOf)那样直截了当,但通常是可能的。 Juriy Zaytsev(kangax)有a great list个特征检测内容。

(旁注:几乎所有浏览器声称(在某种程度上)他们是“Mozilla”,因为有些网站很容易在首选的Netscape浏览器上(是的,那很久以前)到微软的浏览器,并正在进行浏览器检测以进行检查。)

答案 1 :(得分:3)

首先,我发现Quirksmode BrowserDetect script是一个真正的宝石,可能会比你现在使用的更好。

Wikipedia explains用户代理字符串几乎总是以“Mozilla”开头:

  

基于上述内容的非官方格式,由Web浏览器使用如下:Mozilla / [版本]([系统和浏览器信息])[平台]([平台详细信息])[扩展]。

但是,为了解释为什么所有浏览器都声称自己是“Mozilla”,你必须回顾一下20世纪90年代的浏览器战争......来自this article on webaim.org

[...]然后出现了一个名为“Mozilla”的新网络浏览器,是“Mosaic Killer”的缩写,但Mosaic并没有被逗乐,所以公共名称改为Netscape,Netscape称自己为Mozilla / 1.0(Win3。 1)[...] [...]并且微软变得不耐烦,并且不想等待网站管理员学习IE并开始发送它的框架,因此Internet Explorer宣称它是“Mozilla兼容”并开始模仿Netscape,并称自己Mozilla / 1.22(兼容; MSIE 2.0; Windows 95),[...] 微软用Windows销售IE,并使其比Netscape更好,并且第一次浏览器战争在这片土地面前肆虐。不料,Netscape被杀了,微软也非常高兴。但是Netscape重生为Mozilla,Mozilla建立了Gecko,并称自己为Mozilla / 5.0(Windows; U; Windows NT 5.0; en-US; rv:1.1)Gecko / 20020826,而Gecko是渲染引擎,Gecko很好。 Mozilla成为Firefox,并称自己为Mozilla / 5.0(Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5)Gecko / 20041108 Firefox / 1.0,Firefox非常好。 Gecko开始繁殖,其他浏览器诞生时使用了它的代码,他们称自己为Mozilla / 5.0(Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2)Gecko / 20040825 Camino /0.8.1一个,和Mozilla / 5.0(Windows; U; Windows NT 5.1; de; rv:1.8.1.8)Gecko / 20071008 SeaMonkey / 1.0另一个,假装都是Mozilla,所有这些都是由Gecko驱动的。 [...]

你应该阅读整篇文章,这是一个通知和有趣的。但是长篇大论是,您需要解析用户代理字符串,因为他们几乎都说“Mozilla / 某些东西