Javascript ile Windows 11'i algılama

0

Soru

Kullanıcının bir indirme düğmesine tıkladıklarında doğru ikili dosyaları sunmak için Windows 11 kullanıp kullanmadığını tespit etmeye çalışıyorum. Ben buldum Microsoft önerisi için ne yapmak bu işte. Onlar kullanmanızı öneririz navigator.userAgentData.getHighEntropyValues platform sürümünü içeren bir söz döndüren işlev. İşte önerdikleri kod:

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");
   }
 });

Benim sorunum, bu işlevin eşzamansız olması ve değeri döndürmek yerine bir söz döndürmesidir. Her platform için kullanıcı aracılarını ayrıştırmak için kullandığım tüm kodları eşzamansız bir işleve dönüştürmek istemiyorum.

İlk başta, böyle bir sözü kullanmak yerine await kullanacağımı düşündüm:

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

Ancak bu, onu içeren işlevi zaman uyumsuz hale getirmem gerektiği anlamına geliyordu. Ve aynı kodun async'i desteklemeyen eski tarayıcılarda ve bunu yapanlarda çalışması gerektiğinden, bunu yapamam.

Kullanıcının bu API olmadan Windows 11 kullanıp kullanmadığını tespit etmenin bir yolu var mı? Veya bu API'yi kullanarak ancak eşzamansızlık gerektirmeyen bir şekilde mi?

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

En iyi cevabı

4

Benim sorunum, bu işlevin es6 kullanması ve değeri döndürmek yerine bir söz döndürmesidir.

Tek "ES6" (ES2015) ok işlevidir. Ok işlevini kullanmak istemiyorsanız geleneksel bir işlevi kullanabilirsiniz. Söz, dil tarafından değil, platform tarafından verilir.

Her platform için kullanıcı aracılarını ayrıştırmak için kullandığım tüm kodları bir platforma dönüştürmek zorunda kalmak istemiyorum. async işlev.

Zorunda değilsiniz, gösterdiğiniz kodun ne yaptığını yapabilirsiniz: .then yöntem. Evet, eşzamansız olacaktır (yüksek entropi bilgileri yalnızca eşzamansız olarak kullanılabilir, çünkü kullanıcıdan izin istemesi gerekebilir), ancak yine de desteklemeyen tarayıcılarda çalışacaktır async fonksiyonlar (tabii ki destekledikleri sürece getHighEntropyValues).

Aksi takdirde, ayrıştırmaya geri dönmeniz gerekir navigator.userAgent ve bu çok güvenilmez. Bunu zaten desteklemeyen ajanlar için isteyeceksin. getHighEntropyValues veya izni reddeden kullanıcılar, böylece açılır pencere için en iyi tahmininizi yapabilirsiniz. Kullanıcının A) Yanlış bir tahminde bulunabilmesi ve B) Daha sonra başka bir platformda kullanılmak üzere indirebilmesi için bir açılır menü (veya benzeri) sağladığınızdan emin olun.

2021-11-23 15:45:54

Teşekkürler cevap için. Ok işlevinin es6 olmasının bir sorun olmadığı ve eski bir stil işlevini kolayca kullanabileceği konusunda haklısınız. Sanırım ele almaya çalıştığım sorun, bu bilgiyi eşzamanlı olarak kullanmak istediğim bir yerde işlevin eşzamansız (geri arama veya bekleme yoluyla) olmasıdır (bu nedenle tüm işlem kodunu değiştirmem gerekmez) her platformda).
DHamrick

@ DHamrick sınırlama, API'nin eşzamansız olmasıdır, bu nedenle eşzamanlı olarak kullanılamaz.
evolutionxbox

@evolutionxbox yeterince adil! Aynı hedefe ulaşan başka bir API var mı? Kullanıcının Windows 11 kullanıp kullanmadığını mı buluyorsunuz?
DHamrick

@DHamrick hayır olduğunu sanmıyorum. stackoverflow.com/questions/9514179 / ... çoğu cevap bunu kullanıyor gibi görünüyor
evolutionxbox

Diğer dillerde

Bu sayfa diğer dillerde

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