Eu estou tentando detectar se o usuário está usando o Windows 11, a fim de servir os binários corretos quando clicam em um botão de download. Eu encontrei Microsoft sugestão de como fazer isso aqui. Eles sugerem a navigator.userAgentData.getHighEntropyValues
função que retorna uma promessa que contém a versão de plataforma. Aqui está o código sugerem:
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");
}
});
O meu problema é que esta função é assíncrona e retorna uma promessa, em vez de retornar o valor. Eu não quero ter que converter todo o código que eu uso para analisar os agentes do usuário para cada plataforma para uma função async.
No início, eu pensei que eu ia usar o aguardam em vez de usar a promessa como esta:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
No entanto, isso significava que eu teria de fazer a função que o contém assíncrona. E desde este mesmo código precisa para funcionar em navegadores antigos que não suportam assíncrona e aquelas que fazer, eu não posso fazer isso.
Existe uma maneira de detectar se o usuário está usando o Windows 11 sem essa API? Ou utilizando esta API, mas de uma forma que não exige assíncrono?