【发布时间】:2022-01-02 02:36:58
【问题描述】:
我正在尝试检测用户是否正在使用 Windows 11,以便在他们单击下载按钮时提供正确的二进制文件。我找到了微软关于如何做到这一点的建议here。他们建议使用navigator.userAgentData.getHighEntropyValues 函数,该函数返回包含平台版本的承诺。这是他们建议的代码:
navigator.userAgentData.getHighEntropyValues(["platformVersion"])
.then(ua => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
}
else if (majorPlatformVersion > 0) {
console.log("Windows 10");
}
else {
console.log("Before Windows 10");
}
}
else {
console.log("Not running on Windows");
}
});
我的问题是这个函数是异步的并且返回一个promise而不是返回值。我不想将用于解析每个平台的用户代理的所有代码都转换为异步函数。
起初,我以为我会使用 await 而不是像这样使用 Promise:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
但是,这意味着我需要将包含它的函数设为异步。而且由于同样的代码需要在不支持异步的旧浏览器和支持异步的浏览器上运行,我不能这样做。
有没有办法检测用户是否在没有此 API 的情况下使用 Windows 11?还是以不需要异步的方式使用此 API?
【问题讨论】:
-
navigator.oscpu呢? -
@evolutionxbox - Not recommended(并没有在我使用的类似 Chrome 的浏览器上实现,FWIW)。
标签: javascript ecmascript-6 windows-11