Próbuję ustalić, czy użytkownik korzysta z systemu Windows 11 do obsługi odpowiednich plików binarnych, gdy kliknie przycisk pobierania. Znalazłem tutaj oferta Microsoft o tym, jak to zrobić. Oferują one korzystać navigator.userAgentData.getHighEntropyValues
funkcja, która zwraca obietnica, która zawiera wersję platformy. Oto kod, który oferują:
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");
}
});
Mój problem polega na tym, że funkcja ta jest asynchroniczne i zwraca obietnica zamiast zwrotu wartości. Nie chcę nawracać cały kod, który używam do analizy własnych agentów dla każdej platformy, w asynchronicznej funkcji.
Najpierw myślałem, że będę używać wait zamiast korzystać z obietnica, coś podobnego do tego:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
To jednak oznaczało, że trzeba będzie zrobić funkcję, który go zawiera, asynchroniczne. I ponieważ ten sam kod musi działać w starszych przeglądarkach, które nie obsługują asynchroniczny, i tych, którzy utrzymują, że nie mogę tego zrobić.
Czy istnieje sposób, aby określić, czy użytkownik korzysta z systemu Windows 11 bez tego API? Lub korzystać z tego API, ale w taki sposób, aby nie była wymagana jest asynchroniczny?