首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中检测Apple Silicon mac

在JavaScript中检测Apple Silicon mac
EN

Stack Overflow用户
提问于 2020-12-04 23:58:59
回答 2查看 2K关注 0票数 11

有没有办法在JavaScript中检测Apple Silicon Mac?

navigator中的属性似乎没有太大帮助,例如,navigator.platform设置为MacIntel,而用户代理完全相同。

原因:我有两个版本的软件可供选择,分别是英特尔和Apple Silicon。问用户“你的Mac是Apple Silicon还是Intel?”不是很好。

EN

回答 2

Stack Overflow用户

发布于 2020-12-23 00:32:17

我有一个解决方案,但感觉很脆弱。

检查操作系统,因为Apple Silicon只存在于10_15或更高版本:

代码语言:javascript
复制
navigator.userAgent.match(/OS X 10_([789]|1[01234])/)

使用webgl检查GPU:

代码语言:javascript
复制
var w = document.createElement("canvas").getContext("webgl");
var d = w.getExtension('WEBGL_debug_renderer_info');
var g = d && w.getParameter(d.UNMASKED_RENDERER_WEBGL) || "";
if (g.match(/Apple/) && !g.match(/Apple GPU/)) {
   ...definitely arm...
}

如果你看到苹果的GPU,那么它就是Safari,它隐藏了GPU以防止指纹识别。深入挖掘功能:

代码语言:javascript
复制
if (w.getSupportedExtensions().indexOf("WEBGL_compressed_texture_s3tc_srgb") == -1) {
  ...probably arm...
}

(我将我的MacBook Pro的功能与新的M1 Air进行了比较,但Air上缺少这一项。其他的都是一样的。)

我采用的方法是给用户一个选择,但使用此测试来选择默认值。

如果有人有别的想法,可以帮助缩小M1的范围,我很乐意尝试一下……

更新:正如Romain在评论中指出的那样,苹果在Big Sur中添加了对缺少的扩展的支持,所以它现在不能工作(在Safari中;它仍然可以在Chrome和Firefox中使用)。

票数 6
EN

Stack Overflow用户

发布于 2021-10-14 10:38:42

有一个库可以为您提供有关Node.js - os (const os = require('os'))中的操作系统的信息。它有一个返回cpu核心的方法- os.cpus(),你可以只取第一个元素,然后检查它是不是你想要的模型,或者它是否只是在它的模型- let isM1 = cpuCore[0].model.includes("Apple M1")中包含一个字符串"Apple M1“。

还可以检查os.arch()方法,因为它:

CPU返回为其编译Node.js二进制文件的操作系统

体系结构。

然而,我建议在使用arch方法时要高度注意,因为我有几次M1 Mac从os.arch()返回x64而不是arm64的情况,这是预期的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65146751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档