9

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

在 Chrome、Firefox、SafariNetscape 中,它始终显示浏览器代号为 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

火狐输出:

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 

游猎输出:

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

2 回答 2

11

也许应该,这取决于他们想要达到的目标。

但这只是说明了为什么浏览器检测已经声名狼藉,有利于特征检测。浏览器检测代码的老化速度非常快。另一方面,特征检测是相当永恒的。

例如:我可以检查浏览器是否为 IE,如果是,则假设浏览器没有Array.prototype.indexOf. 但后来 IE9 出现并添加了它,但就像杯子一样,我仍在使用我自己的版本,因为我认为“IE”没有它。更好地实际检查它是否存在于我正在运行的实现中,而不用太在意它是什么品牌。当然,特征检测可以在我从未听说过的浏览器上工作。浏览器检测将失败并退回到一些完全任意的“默认值”。

有时它不像做一个那样直截了当if (Array.prototype.indexOf),但它通常是可能的。Juriy Zaytsev ( kangax ) 有很多特征检测的东西。

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

于 2010-12-23T22:57:14.067 回答
3

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

维基百科解释说用户代理字符串几乎总是以“Mozilla”开头:

基于上述内容,Web 浏览器使用的非官方格式如下:Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]。

但是,为了解释为什么所有浏览器都声称自己是“Mozilla”,您必须及时回到 1990 年代的浏览器大战......来自webaim.org 上的这篇文章

[...] 随后出现了一种新的网络浏览器,称为“Mozilla”,是“Mosaic Killer”的缩写,但 Mosaic 并不好笑,因此将公开名称更改为 Netscape,Netscape 将自己称为 Mozilla/1.0(Win3.0)。 1) [...] [...] 微软变得不耐烦了,不想等网站管理员知道 IE 并开始向它发送帧,所以 Internet Explorer 宣布它是“Mozilla 兼容的”并开始冒充 Netscape,并称自己为 Mozilla/1.22(兼容;MSIE 2.0;Windows 95),[...] 微软将 IE 与 Windows 一起出售,并使其比 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 提供支持。[...] 并且 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 提供支持。[...] 并且 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 / something

于 2010-12-23T23:01:59.263 回答