2022新版判断PC端浏览器种类和版本

2022-07-20  本文已影响0人  peg600

很多网上搜到的都是旧答案对现在的userAgent已经不适用,比如选的这个是网上搜索比较靠前的,在Edge上实际测一下:


就这?

可以发现老方法判断的非常不准,因为Edge的userAgent返回的是这个:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62

后面又从 stack overflow 找到了个靠谱的,可以区分浏览器,浏览器版本,以及Edge是老内核还是新内核

navigator.saysWho = (() => {
  const { userAgent } = navigator
  let match = userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []
  let temp

  if (/trident/i.test(match[1])) {
    temp = /\brv[ :]+(\d+)/g.exec(userAgent) || []

    return `IE ${temp[1] || ''}`
  }

  if (match[1] === 'Chrome') {
    temp = userAgent.match(/\b(OPR|Edge)\/(\d+)/)

    if (temp !== null) {
      return temp.slice(1).join(' ').replace('OPR', 'Opera')
    }

    temp = userAgent.match(/\b(Edg)\/(\d+)/)

    if (temp !== null) {
      return temp.slice(1).join(' ').replace('Edg', 'Edge (Chromium)')
    }
  }

  match = match[2] ? [ match[1], match[2] ] : [ navigator.appName, navigator.appVersion, '-?' ]
  temp = userAgent.match(/version\/(\d+)/i)

  if (temp !== null) {
    match.splice(1, 1, temp[1])
  }

  return match.join(' ')
})()

console.log(navigator.saysWho) // outputs: `Chrome 89`

当然依赖userAgent判断本身不一定准确,因为用户可以随意修改。但大部分情况区分浏览器是为了用户画像和兼容性考虑,会改userAgent的个别用户也就不纳入考虑了

上一篇下一篇

猜你喜欢

热点阅读