在我测试过的所有浏览器(IE,Firefox,Chrome,Safari,Opera,Yandex)中,window.navigator.appCodeName
都会返回"Mozilla"
。我知道网络浏览器的历史"劫持"用户代理愚弄页面,认为它们与所有其他浏览器兼容,而且我满足于appCodeName
只是作为该主体的扩展,但是,我读了the standard,它变成了标准本身说这将是硬编码的价值" Mozilla"。所以这些浏览器实际上都遵循标准。
为什么这个值存在?我认为它留作将来使用,但计划是什么?
This question并没有真正解释它,因为它所说的只是因为浏览器劫持了它,我已经理解了,但我还想知道过去或将来的用途是什么/是
答案 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。它旨在单独表示每个浏览器的代码名称。但如上所述,历史又走了另一条道路。