Я пытаюсь определить, использует ли пользователь 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");
}
});
Моя проблема в том, что эта функция является асинхронной и возвращает обещание вместо возврата значения. Я не хочу преобразовывать весь код, который я использую для анализа пользовательских агентов для каждой платформы, в асинхронную функцию.
Сначала я думал, что буду использовать wait вместо того, чтобы использовать обещание, подобное этому:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
Однако это означало, что мне нужно будет сделать функцию, содержащую его, асинхронной. И поскольку этот же код должен работать в старых браузерах, которые не поддерживают асинхронность, и в тех, которые поддерживают, я не могу этого сделать.
Есть ли способ определить, использует ли пользователь Windows 11 без этого API? Или использовать этот API, но таким образом, чтобы не требовалась асинхронность?