Încerc să detecteze dacă utilizatorul este folosind Windows 11 în scopul de a servi corect binare atunci când faceți clic pe un buton de download. Am găsit Microsoft sugestie pentru modul de a face acest lucru aici. Ei sugerează utilizarea navigator.userAgentData.getHighEntropyValues
funcție care returnează o promisiune care conțin versiunea platformei. Aici este codul ei sugerează:
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");
}
});
Problema mea este că această funcție este asincron și returnează o promisiune în loc de a returna o valoare. Nu vreau să aibă de a converti toate din codul folosesc pentru a analiza agentii utilizator pentru fiecare platformă în asincron funcție.
La început, am crezut că mi-ar folosi așteaptă în loc de a folosi promisiunea ca aceasta:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
Cu toate acestea, acest lucru a însemnat că mi-ar trebui pentru a face funcția care conține asincron. Și din același cod trebuie să lucreze pe browsere mai vechi care nu acceptă asincron și cei care o fac, nu pot face asta.
Există o modalitate de a detecta daca utilizatorul este folosind Windows 11 fără acest API? Sau folosind acest API, dar într-un mod care nu are nevoie de async?