window.navigator.appCodeName的目的是什么

What is the purpose of window.navigator.appCodeName?

本文关键字:是什么 appCodeName navigator window      更新时间:2023-09-26

在我测试的所有浏览器(IE,Firefox,Chrome,Safari,Opera,Yandex)中,window.navigator.appCodeName返回"Mozilla"。我知道网络浏览器"劫持"用户代理以欺骗页面以认为它们与所有其他浏览器兼容的历史,我满足于接受appCodeName只是该原则的扩展,但是,我阅读了标准,事实证明标准本身说这将是硬编码值"Mozilla"。因此,所有这些浏览器实际上都遵循标准。

为什么存在此值?我假设它是为将来使用而保留的,但计划是什么?

这个问题并没有真正解释它,因为它只是说这是因为浏览器劫持了它,我已经明白了,但我更想知道过去或未来的用途是什么。

来自 NavigatorID.appCodeName - Web API 接口:

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

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

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

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

我找不到任何关于 appCodeName 属性何时在 navigator 对象中首次可用的文档(大概是在 2000 年之前,因为它在 2000 年被引用为"很久以前")。

您可能会对本文感兴趣: 常用浏览器中的代理字符串

浏览器之间的战争

这是一个历史和兼容性目的。

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

由于功能检测在

当时还不算什么,因此浏览器嗅探是检测功能是否可以使用的热门方法。因此,开发人员四处嗅探并仅针对特定浏览器实现了不错的新功能。但后来另一个浏览器供应商也实现了该功能,但用户没有看到它,因为它不是"Mozilla"(例如)。

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


简而言之,差不多

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


初衷

该属性的目的首先是表示浏览器的内部代码名称(如Android 5的"棒棒糖")。Mozilla是最早实现它的人之一 - 可能是JS-Developer探索的API或他们自己的脚本。它旨在单独表示每个浏览器的代码名称。但如前所述,历史走了另一条路。