使用 javascript 确定 OS

Determine OS using javascript

我正在 Javascript 中寻找获取客户端操作系统的通用方法。许多记录在案的解决方案都使用用户代理,我在过时的堆栈溢出上遇到过类似的 questions/answers。下面提供了一个示例函数,但我想知道是否有更全面的版本满足以下准则:

下面的示例是在没有考虑太多的情况下组合在一起的,我正在寻找它的更好版本

function getOS() {
  var osStr;
  var ua = navigator.userAgent.toLowerCase();

  if (ua.indexOf("windows xp") !== -1) {
    osStr = "WindowsXP";
  } else if (ua.indexOf("windows nt 6.1") !== -1) {
    osStr = "Windows7";
  } else if (ua.indexOf("windows nt 10.0") !== -1) {
    osStr = "Windows10";
  } else if (ua.indexOf("iemobile") !== -1 || ua.indexOf("windows phone") !== -1) {
    osStr = "WindowsMobile";
  } else if (ua.indexOf("windows") !== -1) {
    osStr = "Windows";
  } else if (ua.indexOf("ipad") !== -1) {
    osStr = "ipad";
  } else if (ua.indexOf("ipod") !== -1) {
    osStr = "iTouch)";
  } else if (ua.indexOf("iphone") !== -1) {
    osStr = "iPhone)";
  } else if (ua.indexOf("cros") !== -1) {
    osStr = "ChromeOS";
  } else if (ua.indexOf("android") !== -1) {
    osStr = "Android";
  } else if (ua.indexOf("blackberry") !== -1) {
    osStr = "Blackberry";
  } else if (ua.indexOf("palm") !== -1) {
    osStr = "PalmOS";
  } else if (ua.indexOf("kindle") !== -1) {
    osStr = "Kindle";
  } else if (ua.indexOf("ubuntu") !== -1) {
    osStr = "Ubuntu";
  } else if (ua.indexOf("linux") !== -1) {
    osStr = "Linux";
  } else if (ua.indexOf("nix") !== -1) {
    osStr = "UNIX";
  } else {
    osStr = "Unknown";
  }

  return osStr;
}

有很多不同的用户代理字符串请参阅 http://www.user-agents.org/

筛选所有内容是不切实际的。根据您的用例,过滤掉您关心的那些会更有益。

但是,您可以使用一些 API,它们已经为您完成了艰苦的工作 https://developers.whatismybrowser.com/api/features/user-agent-parse 是一个很棒的工具,可以为您解析用户代理字符串

这是一个更全面的列表,每个列表都有示例 https://www.whatsmyua.info/

希望将 OS 与用户代理组合成一个字符串,https://github.com/faisalman/ua-parser-js 的 UAParser 库(通过上面的答案找到)对两者都适用。该库目前是最新的,看起来维护得很好。它的缩小版本是 19KB。创建了一个函数

  function getPlatform() {
      var uap = UAParser(navigator.userAgent);
      var osVersion = uap.os.version;
      if (osVersion == null) {
        osVersion = "";
      }
      var browserVersion = uap.browser.major;
      if (browserVersion == null) {
        browserVersion = "";
      }

      var platform = uap.os.name + osVersion + "_" + uap.browser.name + browserVersion;
      platform = platform.replace(/\s/g, '');

      return platform;
  }

调用时 returns 无空格字符串 OS_UA 作为 URL 的一部分从客户端转发到服务器。