瀏覽器版本偵測

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

navigator.userAgentData

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

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


navigator.userAgent


瀏覽器檢測 JavaScript Browser Detection

使用 JavaScript 來判斷網頁瀏覽訪客正在使用哪種瀏覽器的技術。可以用來提供不同的網頁內容或功能,根據不同的瀏覽器的支援程度或偏好來調整細節。使用 JavaScript 用戶代理 User Agent 由瀏覽器發送給伺服器的字串資訊,用來識別自己的名稱、版本、作業系統等資訊。可以使用 navigator.userAgent 屬性來取得用戶代理字串,並使用字串方法或正則表達式來檢查其中是否包含某個瀏覽器的名稱。

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 的特徵


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


navigator.appName IE10 以下傳回 IE11 傳回 Netscape.
Chrome, Firefox, Safari, Opera 均傳回 Netscape


navigator.appVersion 傳回格式不太一樣


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


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