js获取操作系统类型/操作系统版本、浏览器类型/浏览器版本、判断是否为IE或兼容IE内核的浏览器

// 获取操作系统类型
export function getOsInfo() {
  let userAgent = window.navigator.userAgent.toLowerCase();
  let version = "";
  if (userAgent.indexOf("win") > -1) {
    if (
      userAgent.indexOf("windows nt 5.0") > -1 ||
      userAgent.indexOf("Windows 2000") > -1
    ) {
      version = "Windows 2000";
    } else if (
      userAgent.indexOf("windows nt 5.1") > -1 ||
      userAgent.indexOf("Windows XP") > -1
    ) {
      version = "Windows XP";
    } else if (
      userAgent.indexOf("windows nt 5.2") > -1 ||
      userAgent.indexOf("Windows 2003") > -1
    ) {
      version = "Windows 2003";
    } else if (
      userAgent.indexOf("windows nt 6.0") > -1 ||
      userAgent.indexOf("Windows Vista") > -1
    ) {
      version = "Windows Vista";
    } else if (
      userAgent.indexOf("windows nt 6.1") > -1 ||
      userAgent.indexOf("windows 7") > -1
    ) {
      version = "Windows 7";
    } else if (
      userAgent.indexOf("windows nt 6.2") > -1 ||
      userAgent.indexOf("windows 8") > -1
    ) {
      version = "Windows 8";
    } else if (userAgent.indexOf("windows nt 6.3") > -1) {
      version = "Windows 8.1";
    } else if (
      userAgent.indexOf("windows nt 6.4") > -1 ||
      userAgent.indexOf("windows nt 10") > -1
    ) {
      version = "Windows 10";
    } else {
      version = "Unknown";
    }
  } else if (userAgent.indexOf("iphone") > -1) {
    version = "Iphone";
  } else if (userAgent.indexOf("mac") > -1) {
    version = "Mac";
  } else if (
    userAgent.indexOf("x11") > -1 ||
    userAgent.indexOf("unix") > -1 ||
    userAgent.indexOf("sunname") > -1 ||
    userAgent.indexOf("bsd") > -1
  ) {
    version = "Unix";
  } else if (userAgent.indexOf("linux") > -1) {
    if (userAgent.indexOf("android") > -1) {
      version = "Android";
    } else {
      version = "Linux";
    }
  } else {
    version = "Unknown";
  }
  return version;
}

// 获取操作系统版本
export function getOSVersion() {
  var sUserAgent = navigator.userAgent;
  var isWin = navigator.platform == "Win32" || navigator.platform == "Windows";
  var isMac =
    navigator.platform == "Mac68K" ||
    navigator.platform == "MacPPC" ||
    navigator.platform == "Macintosh" ||
    navigator.platform == "MacIntel";
  if (isMac) return "Mac";
  var isUnix = navigator.platform == "X11" && !isWin && !isMac;
  if (isUnix) return "Unix";
  var isLinux = String(navigator.platform).indexOf("Linux") > -1;
  if (isLinux) return "Linux";
  if (isWin) {
    var isWin2K =
      sUserAgent.indexOf("Windows NT 5.0") > -1 ||
      sUserAgent.indexOf("Windows 2000") > -1;
    if (isWin2K) return "Win2000";
    var isWinXP =
      sUserAgent.indexOf("Windows NT 5.1") > -1 ||
      sUserAgent.indexOf("Windows XP") > -1;
    if (isWinXP) return "WinXP";
    var isWin2003 =
      sUserAgent.indexOf("Windows NT 5.2") > -1 ||
      sUserAgent.indexOf("Windows 2003") > -1;
    if (isWin2003) return "Win2003";
    var isWinVista =
      sUserAgent.indexOf("Windows NT 6.0") > -1 ||
      sUserAgent.indexOf("Windows Vista") > -1;
    if (isWinVista) return "WinVista";
    var isWin7 =
      sUserAgent.indexOf("Windows NT 6.1") > -1 ||
      sUserAgent.indexOf("Windows 7") > -1;
    if (isWin7) return "Win7";
    var isWin10 =
      sUserAgent.indexOf("Windows NT 10") > -1 ||
      sUserAgent.indexOf("Windows 10") > -1;
    if (isWin10) return "Win10";
  }
  return "other";
}

// 获取浏览器类型
export function getBrowser() {
  var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器
  var isIE =
    userAgent.indexOf("compatible") > -1 &&
    userAgent.indexOf("MSIE") > -1 &&
    !isOpera; //判断是否IE浏览器
  var isEdge = userAgent.indexOf("Edge") > -1; //判断是否IE的Edge浏览器
  var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器
  var isSafari =
    userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
  var isChrome =
    userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器

  if (isIE) {
    var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
    reIE.test(userAgent);
    var fIEVersion = parseFloat(RegExp["$1"]);
    if (fIEVersion == 7) {
      return "IE7";
    } else if (fIEVersion == 8) {
      return "IE8";
    } else if (fIEVersion == 9) {
      return "IE9";
    } else if (fIEVersion == 10) {
      return "IE10";
    } else if (fIEVersion == 11) {
      return "IE11";
    } else {
      return "0";
    } //IE版本过低
    return "IE";
  }
  if (isOpera) {
    return "Opera";
  }
  if (isEdge) {
    return "Edge";
  }
  if (isFF) {
    return "FF";
  }
  if (isSafari) {
    return "Safari";
  }
  if (isChrome) {
    return "Chrome";
  }
}

// 获取浏览器版本号
export function getBrowseVersion() {
  var browser = {};
  var userAgent = navigator.userAgent.toLowerCase();
  var s;
  (s = userAgent.match(/msie ([\d.]+)/))
    ? (browser.ie = s[1])
    : (s = userAgent.match(/firefox\/([\d.]+)/))
    ? (browser.firefox = s[1])
    : (s = userAgent.match(/chrome\/([\d.]+)/))
    ? (browser.chrome = s[1])
    : (s = userAgent.match(/opera.([\d.]+)/))
    ? (browser.opera = s[1])
    : (s = userAgent.match(/version\/([\d.]+).*safari/))
    ? (browser.safari = s[1])
    : 0;
  var version = "";
  if (browser.ie) {
    version = browser.ie;
  } else {
    if (browser.firefox) {
      version = browser.firefox;
    } else {
      if (browser.chrome) {
        version = browser.chrome;
      } else {
        if (browser.opera) {
          version = browser.opera;
        } else {
          if (browser.safari) {
            version = browser.safari;
          } else {
            version = "未知浏览器";
          }
        }
      }
    }
  }
  return version;
}

// 判断是否为IE或兼容IE内核的浏览器
export function checkBrowserCompatibility() {
  var userAgent = navigator.userAgent.toLowerCase();
  var isIE = false;
  var isCompatibilityMode = false;

  // 检查是否为IE11
  if (userAgent.indexOf("trident/") > -1) {
    var rv = userAgent.match(/rv:(\d+\.\d+)/);
    if (rv && parseFloat(rv[1], 10) === 11.0) {
      isIE = true;
      // 对于IE11,通常没有直接的兼容模式标识,但可以通过document.documentMode来检查
      isCompatibilityMode = document.documentMode && document.documentMode < 12;
    }
  }
  // 检查是否为旧版IE(IE10及以下)
  else if (userAgent.indexOf("msie ") > -1) {
    var ieVersion = userAgent.match(/msie (\d+\.\d+)/);
    if (ieVersion) {
      isIE = true;
      isCompatibilityMode = true;
    }
  }
  return isIE || isCompatibilityMode;
}