Je suis en train d'essayer de détecter si l'utilisateur est à l'aide de Windows 11 afin de servir la bonne binaires lorsqu'ils cliquent sur un bouton de téléchargement. J'ai trouvé de Microsoft suggestion sur la façon de le faire ici. Ils suggèrent d'utiliser l' navigator.userAgentData.getHighEntropyValues
fonction qui retourne une promesse contenant la version de la plateforme. Voici le code qu'ils suggèrent:
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");
}
});
Mon problème est que cette fonction est asynchrone et retourne une promesse au lieu de retourner la valeur. Je ne veux pas avoir à convertir tous les code que j'ai utiliser pour analyser les agents d'utilisateur pour chaque plate-forme à une fonction async.
Au début, j'ai pensé que je pourrais utiliser attendent au lieu d'utiliser de la promesse, comme ceci:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
Toutefois, cela signifiait que j'aurais besoin de faire la fonction qui la contient asynchrone. Et depuis ce même code doit fonctionner sur les anciens navigateurs qui ne supportent pas async et ceux qui le font, je ne peux pas le faire.
Est-il un moyen de détecter si l'utilisateur est à l'aide de Windows 11 sans cette API? Ou de l'utilisation de cette API, mais d'une manière qui ne nécessite pas async?