window.navigator.appCodeName的目的是什么?

时间:2015-06-15 16:44:47

标签: javascript html

在我测试过的所有浏览器(IE,Firefox,Chrome,Safari,Opera,Yandex)中,window.navigator.appCodeName都会返回"Mozilla"。我知道网络浏览器的历史"劫持"用户代理愚弄页面,认为它们与所有其他浏览器兼容,而且我满足于appCodeName只是作为该主体的扩展,但是,我读了the standard,它变成了标准本身说这将是硬编码的价值" Mozilla"。所以这些浏览器实际上都遵循标准。

为什么这个值存在?我认为它留作将来使用,但计划是什么?

This question并没有真正解释它,因为它所说的只是因为浏览器劫持了它,我已经理解了,但我还想知道过去或将来的用途是什么/是

2 个答案:

答案 0 :(得分:3)

来自NavigatorID.appCodeName - Web API Interfaces

  

NavigatorID.appCodeName始终在任何浏览器上返回'Mozilla'。保留此属性仅用于兼容性目的。

     

注意:不要依赖此属性来返回真实的产品名称。所有浏览器都返回“Mozilla”作为此属性的值。

这类似于NavigatorID.product,它总是返回字符串'Gecko'

正如Sebastian G.在his answer中解释的那样,它被用于用户代理嗅探。这意味着在某些时间点,非Mozilla浏览器的UA字符串中不包含Mozilla。虽然我不确定基于Mozilla / Mozilla的浏览器在UA字符串中的"Mozilla"和非Mozilla浏览器中添加"Mozilla"之间的时间段有多长。

我无法找到appCodeName属性何时首次出现在navigator对象中的文档(大概是在2000之前,因为它是referenced in 2000 as "ages ago")。

您可能会对此文章感兴趣:Agent Strings in Popular Browsers

答案 1 :(得分:2)

浏览器之间的战争

这是历史和兼容性目的。

这一切始于第一批浏览器出现时。很快就开始了功能实现之战(毕竟还没有结束)。他们希望开发人员使用他们的浏览器。

由于功能检测不是当时的事情,浏览器嗅探是检测功能是否可以使用的热门方法。因此,开发人员只是为特定的浏览器嗤之以鼻,并实现了漂亮的新功能。但是其他浏览器供应商也实现了那个功能,但是用户没有看到它,因为它不是'Mozilla'(例如)。

解决方案?非Mozilla浏览器的用户也应该看到这个漂亮的小功能并按预期使用网站 - 所以他们都开始撒谎

简而言之,这就是它。 它不是为未来的计划保留,而是为过去的内容访问保留。它仍然是这样的,因为网络设计为持久。所以今天你可以访问一个非常古老的网站,获取过去的所有信息和功能。

原始用途

该属性的首要目的是表示浏览器的内部代码名称(如Android 5的“Lollipop”)。 Mozilla是最早实现它的人之一 - 可能是JS-Developer探索或用于自己脚本的API。它旨在单独表示每个浏览器的代码名称。但如上所述,历史又走了另一条道路。