簡體   English   中英

使用 javascript 確定操作系統

[英]Determine OS using javascript

我正在 Javascript 中尋找獲取客戶端操作系統的通用方法。 許多記錄在案的解決方案使用用戶代理,我在堆棧溢出方面遇到過類似的問題/答案,這些問題/答案已經過時。 下面提供了一個示例函數,但我想知道是否有更全面的版本符合以下准則:

  • 所有現代和廣泛使用的操作系統都應該有一個版本,例如,不僅僅是Windows ,還有Windows 10Windows 7
  • 舊的和大量冗余的操作系統可以組合在一起,例如Windows 98Windows Vista可能只顯示為Windows
  • 移動操作系統也需要包含在可能的版本中,例如Android 7.0
  • 代碼不應過長,目的是區分當前最流行的系統。

下面的示例沒有經過太多思考就放在一起,我正在尋找更好的版本

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/ 的示例

正在尋求將操作系統與用戶代理組合成一個字符串,並且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;
  }

它在調用時返回一個沒有空格的字符串OS_UA ,它作為 URL 的一部分從客戶端轉發到服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM