前端如何判断用户的 mac 是 arm 还是 x86
https://www.telerik.com/download/fiddler-everywhere
下载 fiddler-everywhere 的时候,它监测到了我的电脑是 arm
怎么实现的?浏览器的 UA 都还是谎称自己是 intel
是通过 js 调用浏览器 API 获得的结果吗?对应的 API 是哪个呢?
前端如何判断用户的 mac 是 arm 还是 x86
https://www.telerik.com/download/fiddler-everywhere
下载 fiddler-everywhere 的时候,它监测到了我的电脑是 arm
怎么实现的?浏览器的 UA 都还是谎称自己是 intel
是通过 js 调用浏览器 API 获得的结果吗?对应的 API 是哪个呢?
该问题可以通过 JavaScript 调用浏览器 API 来实现。在浏览器中,存在一个名为 navigator.userAgent
的属性,它包含了浏览器用于标识自身的一系列标识符信息,其中就包括了 CPU 的类型。
在苹果电脑上,如果 CPU 是 ARM 架构的,那么 navigator.userAgent
属性中就会包含 "CPU OS X" 字样,并且在该字样后面会跟着 CPU 的类型,例如 "CPU OS X ARM" 或者 "CPU OS X ARM64"。因此,通过判断 navigator.userAgent
中是否包含这些标识符,就可以判断出用户的电脑是否为 ARM 架构的。
下面是一段示例代码,可以用来检测用户电脑的 CPU 类型:
const userAgent = navigator.userAgent;
const isARM = /CPU OS X ARM/.test(userAgent) || /CPU OS X ARM64/.test(userAgent);
console.log(isARM ? 'This is an ARM computer.' : 'This is not an ARM computer.');
这段代码首先获取了 navigator.userAgent
属性的值,然后使用正则表达式检测该字符串中是否包含 "CPU OS X ARM" 或者 "CPU OS X ARM64" 字样。如果包含,那么就认为用户的电脑是 ARM 架构的。最后,将结果输出到控制台中。
需要注意的是,由于 navigator.userAgent
属性可以被用户或某些软件篡改,因此这种检测方法并不是完全可靠的。此外,由于这种方法是基于浏览器的特性来实现的,因此它也只能在浏览器环境下运行。在非浏览器环境下,例如在微信小程序、桌面应用等环境下,该方法就无法使用了。
看了下我的使用 Apple 芯片的 Mac 上原生的 Safari 的 UA ,它用的就是 Intel 。所以不能凭这个信息认定这个 UA 是在伪装 Intel 芯片。
或者说,可能它确实实在伪装。但是如果给所有的 Mac 都在伪装,那么就不能凭借这个信息判断 CPU 芯片了。
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答3.9k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
微软官方文档:
截图中的用浏览器api就可以获取