window.navigator.appCodeName的目的是什么
What is the purpose of window.navigator.appCodeName?
在我测试的所有浏览器(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或他们自己的脚本。它旨在单独表示每个浏览器的代码名称。但如前所述,历史走了另一条路。
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 我的客户端选项是什么
- 这是什么“;要求“;事情
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- @@(“at at”)在ES6 JavaScript中是什么意思
- knex:根据结果创建数组的合适方法是什么
- JSDoc:模块和名称空间之间的关系是什么
- window.navigator.appCodeName的目的是什么