前端如何判断用户的电脑是 arm 还是 x86?

前端如何判断用户的 mac 是 arm 还是 x86

https://www.telerik.com/download/fiddler-everywhere

下载 fiddler-everywhere 的时候,它监测到了我的电脑是 arm

怎么实现的?浏览器的 UA 都还是谎称自己是 intel

图片.png

是通过 js 调用浏览器 API 获得的结果吗?对应的 API 是哪个呢?

阅读 3.2k
avatarAI BotBETA

该问题可以通过 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 属性可以被用户或某些软件篡改,因此这种检测方法并不是完全可靠的。此外,由于这种方法是基于浏览器的特性来实现的,因此它也只能在浏览器环境下运行。在非浏览器环境下,例如在微信小程序、桌面应用等环境下,该方法就无法使用了。

2 个回答
navigator.userAgentData.getHighEntropyValues(["architecture", "bitness"])
 .then(ua => {
   if (navigator.userAgentData.platform === "Windows") {
     if (ua.architecture === 'x86') {
       if (ua.bitness === '64') {
         console.log("x86_64");
       }
       else if (ua.bitness === '32') {
         console.log("x86");
       }
     }
     else if (ua.architecture === 'arm') {
       if (ua.bitness === '64') {
         console.log("ARM64");
       }
       else if (ua.bitness === '32') {
         console.log("ARM32");
       }
     }
   }
   else {
     console.log("Not running on Windows");
   }
 });

image.png

微软官方文档:

https://learn.microsoft.com/zh-cn/microsoft-edge/web-platform...

截图中的用浏览器api就可以获取

 navigator.userAgent;

image.png

看了下我的使用 Apple 芯片的 Mac 上原生的 Safari 的 UA ,它用的就是 Intel 。所以不能凭这个信息认定这个 UA 是在伪装 Intel 芯片。


或者说,可能它确实实在伪装。但是如果给所有的 Mac 都在伪装,那么就不能凭借这个信息判断 CPU 芯片了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题