Rozpoznať Windows 11 cez Javascript

0

Otázka

Snažím sa zistiť, či užívateľ používa Windows 11 s cieľom slúžiť správne binárne súbory, keď kliknete na tlačidlo preberania. Zistil som, Microsoft je návrh na tom, ako to urobiť tu. Tie naznačujú, pomocou navigator.userAgentData.getHighEntropyValues funkcia, ktorá vráti sľub obsahujúce platforma verziu. Tu je kód tie naznačujú:

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 táto funkcia je asynchrónny a vráti sľub miesto vrátenie hodnoty. Nechcem mať previesť všetky kódu som sa používajú na analýzu užívateľských agentov pre každú platformu v async funkciu.

Najprv som si myslel, že by použitie čakajú namiesto pomocou sľubu, ako je tento:

let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])

To však znamenalo, že by som potrebné, aby funkciu, ktorá ho obsahuje async. A keďže tento rovnaký kód musí pracovať na starších prehliadačoch, ktoré nepodporujú async a tie, ktoré robia, nemôžem to urobiť.

Existuje spôsob, ako zistiť, či je užívateľ pomocou Windows 11 bez tohto API? Alebo pomocou tejto API, ale spôsobom, ktorý nevyžaduje async?

ecmascript-6 javascript windows-11
2021-11-23 15:35:58
1

Najlepšiu odpoveď

4

Môj problém je, že táto funkcia používa es6 a vráti sľub miesto vrátenie hodnoty.

Len "ES6" (ES2015) tam je šípka funkciu. Môžete použiť tradičné funkcie, ak nechcete používať šípky funkciu. Sľub je poskytovaná platformu, nie jazyk.

Nechcem mať previesť všetky kódu som sa používajú na analýzu užívateľských agentov pre každú platformu, v k async funkcia.

Nemusíte, môžete si robiť, čo kódexu ste zobrazené má: Použiť .then metódy. Áno, to bude asynchrónne (high-entropia informácie sú len dostupné asynchrónne, pretože to môže mať požiadať používateľa o povolenie), ale to bude stále pracovať na prehliadače, ktoré nepodporujú async funkcie (samozrejme za predpokladu, že podporu getHighEntropyValues).

V opačnom prípade budete musieť klesnúť späť na parsovanie navigator.userAgent a to je veľmi nespoľahlivé. Budete chcieť, aby tak pre látky, ktoré nemajú podporu getHighEntropyValues alebo používateľov, ktorí odoprieť povolenie, takže si môžete urobiť svoj najlepší odhad pre drop-down. Nezabudnite uviesť drop-down (alebo podobný), takže užívateľ môže A) Správny a nesprávny odhad, a B) na Stiahnutie pre neskoršie použitie na iné platformy.

2021-11-23 15:45:54

Vďaka za odpoveď. Máte pravdu, že na šípku funkcia je es6 nie je problém a mohlo by sa ľahko používať staršie štýl funkciu. Myslím, že problém, ktorý sa snažím riešiť je, že funkcia je asynchrónna (či už z spätný hovor alebo čakajú) v mieste, ktoré by som chcel použiť tieto informácie synchrónne (tak nemám potrebu nahradiť všetky manipulácie kód na každej platforme).
DHamrick

@DHamrick obmedzenie je, že API je asynchrónny, tak to nemôže byť použité synchrónne.
evolutionxbox

@evolutionxbox fér! Je tam ďalší API, ktoré dosiahne rovnaký cieľ? Zisťuje, či je užívateľ pomocou Windows 11?
DHamrick

@DHamrick nie, ja si nemyslím, že tam je. stackoverflow.com/questions/9514179/... väčšina odpovedí sa zdá, že ju používať
evolutionxbox

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................