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

Dar*_*htA 9 javascript browser browser-detection

这是探测器:http://w3schools.com/js/tryit.asp? filenamename = 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);
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

NETSCAPE输出:

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)
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 11

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

但它只是说明了为什么浏览器检测已经声名狼借,有利于功能检测.浏览器检测代码的年龄令人难以置信的快.另一方面,特征检测是相当永恒的.

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

有时它并不像做一样直接if (Array.prototype.indexOf),但通常是可能的.Juriy Zaytsev(kangax)有一个很棒的特征检测列表.

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