如何使用JavaScript找到操作系统名称和操作系统版本?


当前回答

js似乎是一个很好的文件库。

使用的例子:

// on IE10 x86 platform preview running in IE7 compatibility mode on Windows 7 64 bit edition
platform.name; // 'IE'
platform.version; // '10.0'
platform.layout; // 'Trident'
platform.os; // 'Windows Server 2008 R2 / 7 x64'
platform.description; // 'IE 10.0 x86 (platform preview; running in IE 7 mode) on Windows Server 2008 R2 / 7 x64'

// or on an iPad
platform.name; // 'Safari'
platform.version; // '5.1'
platform.product; // 'iPad'
platform.manufacturer; // 'Apple'
platform.layout; // 'WebKit'
platform.os; // 'iOS 5.0'
platform.description; // 'Safari 5.1 on Apple iPad (iOS 5.0)'

// or parsing a given UA string
var info = platform.parse('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7.2; en; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 11.52');
info.name; // 'Opera'
info.version; // '11.52'
info.layout; // 'Presto'
info.os; // 'Mac OS X 10.7.2'
info.description; // 'Opera 11.52 (identifying as Firefox 4.0) on Mac OS X 10.7.2'

其他回答

User-Agent字符串对于获取平台信息(OS, OS版本,cpu-arch等)不再可靠,因为可以重写它们,甚至浏览器的默认设置也不准确。 在浏览器控制台中尝试"console.log(navigator)"并检查User-Agent字段。

为了解决上述问题,W3有一个新的提议(https://wicg.github.io/ua-client-hints/),它将允许用户请求关于平台的特定信息。截至2021年5月11日,只有基于铬的浏览器(Chrome、Edge、Opera、Brave……)实现了该规范(该提案仍是非正式的)。

获取平台信息的一种方法是服务器通过向初始响应添加'Accept-CH: Sec-CH-UA-Platform-Version'这样的报头来请求特定的信息,来自客户端的任何后续请求都将包含平台信息报头。欲了解更多信息,请参阅上面的链接。

通过Javascript在客户端获取信息,下面的代码可以使用(复制并粘贴在chrome控制台)。

let platformDetails = await navigator.userAgentData.getHighEntropyValues(["architecture", 
"platform", "platformVersion", "model", "bitness", "uaFullVersion"]);
console.log(platformDetails);

您可以在导航器对象中找到操作系统名称和版本,就像其他人回答的那样。跨浏览器查找这些信息的标准位置是导航器。userAgent财产。但是,用户代理字符串因操作系统和浏览器的不同而有很大差异。

因此,我创建了一个脚本来封装这个逻辑,并以一种熟悉的方式(如http://www.whatsmybrowser.org)报告最常见的操作系统和浏览器。

我开源了脚本,并上传到github, https://github.com/keithws/browser-report。拉请求是受欢迎的!

js似乎是一个很好的文件库。

使用的例子:

// on IE10 x86 platform preview running in IE7 compatibility mode on Windows 7 64 bit edition
platform.name; // 'IE'
platform.version; // '10.0'
platform.layout; // 'Trident'
platform.os; // 'Windows Server 2008 R2 / 7 x64'
platform.description; // 'IE 10.0 x86 (platform preview; running in IE 7 mode) on Windows Server 2008 R2 / 7 x64'

// or on an iPad
platform.name; // 'Safari'
platform.version; // '5.1'
platform.product; // 'iPad'
platform.manufacturer; // 'Apple'
platform.layout; // 'WebKit'
platform.os; // 'iOS 5.0'
platform.description; // 'Safari 5.1 on Apple iPad (iOS 5.0)'

// or parsing a given UA string
var info = platform.parse('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7.2; en; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 11.52');
info.name; // 'Opera'
info.version; // '11.52'
info.layout; // 'Presto'
info.os; // 'Mac OS X 10.7.2'
info.description; // 'Opera 11.52 (identifying as Firefox 4.0) on Mac OS X 10.7.2'

你可以使用这个javascript函数来检查用户的操作系统

  function getOS() {
  var userAgent = window.navigator.userAgent,
      platform = window.navigator.platform,
      macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],
      windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],
      iosPlatforms = ['iPhone', 'iPad', 'iPod'],
      os = null;

  if (macosPlatforms.indexOf(platform) !== -1) {
    os = 'Mac OS';
  } else if (iosPlatforms.indexOf(platform) !== -1) {
    os = 'iOS';
  } else if (windowsPlatforms.indexOf(platform) !== -1) {
    os = 'Windows';
  } else if (/Android/.test(userAgent)) {
    os = 'Android';
  } else if (!os && /Linux/.test(platform)) {
    os = 'Linux';
  }

  return os;
}

alert(getOS());

我不能评论@Ian Ippolito的回答(因为如果我有代表的话我会评论的),但根据他的评论链接,我相当确定你可以找到IOS的Chrome版本。https://developer.chrome.com/multidevice/user-agent?hl=ja列出的UA为:Mozilla/5.0 (iPhone;CPU iPhone OS 10_3像Mac OS X) AppleWebKit/602.1.50 (KHTML,像壁虎)CriOS/56.0.2924.75移动/14E5239e Safari/602.1

所以这应该是可行的:

if ((verOffset = nAgt.indexOf('CriOS')) != -1) {
                //Chrome on iPad spoofing Safari...correct it.
                browser = 'Chrome';
                version = nAgt.substring(verOffset + 6);//should get the criOS ver.
            }

我还没能测试一下(否则我会改进他的答案),因为我的iPad在家里,而我在工作,但我想我应该把它放在那里。