【问题标题】:Browser detection in Javascript --- ERROR?Javascript中的浏览器检测---错误?
【发布时间】:2011-05-30 05:06:13
【问题描述】:

这是检测器: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

火狐输出:

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)

【问题讨论】:

标签: javascript browser browser-detection


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    但是,为了解释为什么所有浏览器都声称自己是“Mozilla”,你必须让时间回到 1990 年代的浏览器大战……来自this article on 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 被杀了,微软一片欢欣鼓舞。但是网景重生为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 / something

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 1970-01-01
      • 2011-09-14
      • 2013-07-29
      • 2018-04-18
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多