我正在尝试检测用户是否正在使用 Windows 11,以便在单击下载按钮时提供正确的二进制文件。我在这里找到了 Microsoft 关于如何执行此操作的建议。他们建议使用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 但不需要异步?