美文网首页
2022新版判断PC端浏览器种类和版本

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

作者: peg600 | 来源:发表于2022-07-20 16:54 被阅读0次

    很多网上搜到的都是旧答案对现在的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的个别用户也就不纳入考虑了

    相关文章

      网友评论

          本文标题:2022新版判断PC端浏览器种类和版本

          本文链接:https://www.haomeiwen.com/subject/dsouirtx.html