navigator.language 何时与 navigator.languages[0] 不同?

Posted

技术标签:

【中文标题】navigator.language 何时与 navigator.languages[0] 不同?【英文标题】:When will navigator.language different to navigator.languages[0]? 【发布时间】:2019-03-30 22:56:33 【问题描述】:

我正在研究浏览器指纹。在app的webview中运行的js会通过获取navigator.language.substr(0,2) == navigator.languages[0].substr(0,2)的结果来检测用户是否在语言上撒谎。

我们发现大约 3% 的用户在语言上撒谎(navigator.language.substr(0,2) != navigator.languages[0].substr(0,2))。 通过 useragent,我们发现这些移动设备是:

部分华为手机(android 5.1、Android 6.0、Android 7.0、Android 8.0.0 ...) 某些 iPhone(使用 OS 9_1、OS 4_3_2、OS 5_1_1、OS 5_0 ...) ...

这些用户是否在语言上撒谎?是否有任何设备或浏览器的原因会导致navigator.language.substr(0,2) != navigator.languages[0].substr(0,2)

【问题讨论】:

【参考方案1】:

请参阅browser compatibility information。上面写着:

在 Chrome 中,navigator.language 是浏览器 UI 的语言,不保证等于 navigator.languages[0]

在 Firefox 中,navigator.languages 属性的值取自 intl.accept_languages 首选项。

它还说 Safari 完全兼容,但也许旧版本不兼容?

【讨论】:

以上是关于navigator.language 何时与 navigator.languages[0] 不同?的主要内容,如果未能解决你的问题,请参考以下文章

使用javascripts的浏览器语言[重复]

javascript基础集锦_Json——浏览器对象

中英文判断

JavaScript--操作BOM

如何在 Scikit 中应用二元分类器来学习何时属性是字符串(不是 int 或 float)

Jarque Bera 与 NA 的测试