Snažím se zjistit, zda uživatel používá Windows 11 v zájmu dosažení správné binární soubory, když klikněte na tlačítko pro stažení. Zjistil jsem, Microsoft je návrh na to, jak to udělat zde. Navrhují pomocí navigator.userAgentData.getHighEntropyValues
funkce, která vrátí slib obsahující verze platformy. Zde je kód navrhují:
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 problém je, že tato funkce je asynchronní a vrátí slib namísto vracení hodnoty. Nechci, aby převést všechny kód, který jsem použít k analýze uživatelských agentů pro každou platformu v asynchronní funkci.
Nejdřív jsem myslel, že čekají místo pomocí slib, jako je tento:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
Nicméně, to znamenalo, že bych potřeboval, aby funkce, která obsahuje to asynchronní. A protože tento stejný kód musí fungovat na starších prohlížečích, které nepodporují asynchronní a ty, které to udělat, nemůžu to udělat.
Existuje způsob, jak zjistit, zda uživatel používá Windows 11 bez tohoto API? Nebo pomocí tohoto API, ale způsobem, který nevyžaduje asynchronní?