瀏覽器版本偵測

navigator.appName 瀏覽器的正式名稱、編碼名稱,均傳回 Netscape

navigator.userAgentData

從 Chrome 101 開始,用戶代理字符串中可用的信息量將減少。要解決此問題,請將 navigator.userAgent、navigator.appVersion 和 navigator.platform 的用法替換為特徵檢測、漸進增強或遷移到 navigator.userAgentData。

但目前瀏覽器支持該功能似乎不完整。



navigator.userAgent



瀏覽器檢測 JavaScript Browser Detection

var browserVersion = function () {
  var UA = navigator.userAgent;
  var tMatch;
  var M = UA.match(/(OPERA|CHROME|SAFARI|FIREFOX|MSIE|TRIDENT(?=\/))\/?\s*(\d+)/i) || [];
  if (/TRIDENT/i.test(M[1])) {
    tMatch = /\brv[ :]+(\d+)/g.exec(UA) || [];
    return "IE " + (tMatch[1] || "");
  }
  if (M[1] === "Chrome") {
    tMatch = UA.match(/\b(OPR|Edg)\/(\d+)/);
    if (tMatch != null) {
      return tMatch.slice(1).join(" ").replace("OPR", "Opera").replace("Edg", "Edge");
    }
  }
  M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, "-?"];
  if ((tMatch = UA.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tMatch[1]);
  return M.join(" ");
};

var browserName = browserVersion();
console.log(browserName);



簡易版本

var browserName = function () {
  const a = navigator.userAgent.toUpperCase();
  var bName;
  if (a.indexOf("TRIDENT") != -1) {
    bName = "IE 11"
  } else if (a.indexOf("MSIE") != -1) {
    bName = "MSIE"
  } else if (a.indexOf("EDG/") != -1) {
    bName = "Edge"
  } else if (a.indexOf("OPR/") != -1) {
    bName = "OPERA"
  } else if (a.indexOf("CHROME") != -1) {
    bName = "Chrome"
  } else if (a.indexOf("FIREFOX") != -1) {
    bName = "Firefox"
  } else if (a.indexOf("SAFARI") != -1) {
    bName = "Safari"
  } else {
    bName = "NO !";
  }
  return bName;
}

navigator window 的特徵


appCodeName 瀏覽器內部編碼名稱

navigator.appCodeName IE, Firefox, Safari, Chrome 均傳回 Mozilla



appName 瀏覽器的正式名稱

navigator.appName IE10 以下傳回 Microsoft Internet Explorer, IE11 傳回 Netscape

Chrome, Firefox, Safari, Opera 均傳回 Netscape



appVersion 瀏覽器的版本

navigator.appVersion 傳回格式不太一樣



platform 瀏覽器的平台

navigator.platform 傳回 Win32;IE 64-bit 傳回 Win64



cookieEnabled 瀏覽器的 cookie 是否啟動

navigator.cookieEnabled 傳回瀏覽器的 cookie 是否啟動(布林值) true/false



Internet Explorer 11 修改了瀏覽器的 user agent,原來的識別碼「MSIE」不見了,參考 使用者代理字串變更

例如以 Windows 10IE11 顯示

Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0;... rv:11.0) like Gecko

rv 來判斷 IE11的版本。

var rv;
var ua = navigator.userAgent;
if (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec(ua) != null) {
  rv = parseFloat(RegExp.$1);
} else {
  rv = -1;
}