浏览器版本侦测

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