检测Windows11通过Javascript

0

的问题

我想如果检测的用户是使用Windows11,以便为正确的二进制文件的时候他们击一下按钮。 我已经找到了微软的建议对于如何做到这一点 在这里. 他们建议使用 navigator.userAgentData.getHighEntropyValues 功能返回一个承诺包含的平台的版本。 这里是代码,他们建议:

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

我的问题是,这个功能是异步的和返回的承诺,而不是返回的价值。 我不想有把所有的代码我用来分析用户的代理,为每一个平台,在一个异功能。

起初,我想我会使用的等待而不是使用该承诺是这样的:

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

然而,这意味着,我需要做的功能,其中包含它异步. 而且,由于这同一个代码需要的工作对旧的浏览器,不支持同步和那些做什么,我不能这样做。

有没有方法检测,如果用户是使用Windows11如果没有这API? 或者使用这API,但在一个方式,不需要同步?

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

最好的答案

4

我的问题是,这种功能使用es6和返回的承诺,而不是返回的价值。

唯一的"ES6"(ES2015)有箭头的功能。 你可以使用一个传统功能,如果你不想使用一个箭头的功能。 该承诺是提供平台,不是语言。

我不想有把所有的代码我用来分析用户的代理,为每个平台中的一个 async 功能。

你没有,你可以做什么代码你已经显示:使用 .then 法。 是的,这将是异步的(高熵信息是 唯一 可用异步,因为它可能需要询问用户的权限),但它仍将工作上的浏览器,不支持 async 功能(提供他们当然支持 getHighEntropyValues).

否则,你必须依靠分析 navigator.userAgent 这是众所周知不可靠的。 你会想,无论如何为代理商不支持 getHighEntropyValues 或用户谁否认的权限,这样你就可以做你最好的猜测。 一定要提供下拉(或类似的),使用户可以A)纠正一个错误的猜测,以及B)下载用于以后在另一个平台。

2021-11-23 15:45:54

谢谢你的回答。 你是对的,箭头的功能正在es6不是一个问题,可以很容易地使用的旧式风格的功能。 我猜测的问题,我想到地址的功能是异步(不管是通过调回或等)在一个地方,我想到使用这一信息同时(因此,我不需要替换所有的装卸码在每一个平台)。
DHamrick

@DHamrick的限制是,API是异步的,所以它不能使用同步。
evolutionxbox

@evolutionxbox公平足够的! 是否有另一API于实现同一目标? 搞清楚,如果用户使用的Windows11?
DHamrick

@DHamrick不,我不认为是有的。 stackoverflow.com/questions/9514179/... 大多数的答案似乎使用它
evolutionxbox

其他语言

此页面有其他语言版本

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