获取浏览器类型,Navigator.userAgent


theme: channing-cyan

highlight: a11y-dark

获取浏览器类型,Navigator.userAgent

一、前言

又又又遇到了兼容 IE 的需求,好在只需要兼容到 IE11,这是一个 bpmn 流程设计器生成流程图(svg),用了一种保存图的写法,但这种写法在 IE11 上有bug,总之就是保存的图没有 Chrome 等其他浏览器完美。于是我们需要识别用户使用的浏览器类型,对 IE浏览器做提供些特别处理。

那么这就设计如何识别用户使用的浏览器类型的问题,这里使用的是 Navigator.userAgent 来获取能代表浏览器的标识字符串。

二、关键技术提前知

1.Navigator.userAgent

userAgent 是 Navigator 的只读属性,返回当前浏览器的用户代理字符串。即是返回用户当前使用的浏览器的能代表浏览器的字符串标识。

tips1:

基于检测用户代理字符串的浏览器识别是 不可靠的,不推荐使用,因为用户代理字符串是用户可配置的。例如:

  • 在 Firefox 中,您可以general.useragent.override更改 about:config. 一些 Firefox 扩展可以做到这一点;但是,这只会更改发送并由navigator.userAgent. 可能还有其他方法利用 JavaScript 代码来识别浏览器。
  • Opera 6+ 允许用户通过菜单设置浏览器识别字符串。
  • Microsoft Internet Explorer 使用 Windows 注册表。
  • Safari 和 iCab 允许用户通过菜单将浏览器用户代理字符串更改为预定义的 Internet Explorer 或 Netscape 字符串。

tps2: 尽管从更安全和规范的角度说,这并不被推荐,但实践中这似乎是判断浏览器类型的最好手段了。如有更好地方案,欢迎评论区分享。

2.浏览器兼容性

2.1 userAgent 的浏览器兼容性

userAgent 是较早就被各大浏览器支持了的,浏览器兼容性方面可以说很好,从兼容这个角度讲,可以放心大胆的用。具体上 IE4、Chrome1,Safari1,Firefox1就已经支持了。更多兼容性详情如下图所示。

image.png

2.2 match() 的浏览器兼容性

match() 也很早就被各大浏览器支持,它的浏览器兼容性也非常好,具体如下图所示。

image.png

3.String.prototype.match()

match() 方法检索返回一个字符串匹配正则表达式的结果。

需要注意的是:

①如果正则表达式不包含 g 标志,str.match() 将返回与 RegExp.exec(). 相同的结果。

②如果你想要获得捕获组,并且设置了全局标志,你需要用 RegExp.exec() 或者 String.prototype.matchAll()。

4.使用示例

获取 userAgent 返回的字符串

``` const userAgent = window.navigator.userAgent console.log(userAgent) // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36

// 通过字符串匹配关键字识别是哪种浏览器,例如 userAgent.match(/firefox/), // 在 userAgent 中寻找关键字firefox,能找到匹配的则认为是火狐浏览器。

let browserType = "" if (userAgent.match(/firefox/) != null) { browserType = '火狐' } ```

三、获取浏览器类型函数

```js ** * 获取浏览器类型 * @returns {null|string} 返回浏览器类型 */ export function getBrowser () { let ua = navigator.userAgent.toLocaleLowerCase() let browserType = null

if (ua.match(/msie/) != null || ua.match(/trident/) != null) { browserType = 'IE' } else if (ua.match(/firefox/) != null) { browserType = '火狐' } else if (ua.match(/ubrowser/) != null) { browserType = 'UC' } else if (ua.match(/opera/) != null) { browserType = '欧朋' } else if (ua.match(/bidubrowser/) != null) { browserType = '百度' } else if (ua.match(/metasr/) != null) { browserType = '搜狗' } else if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) { browserType = 'QQ' } else if (ua.match(/maxthon/) != null) { browserType = '遨游' } else if (ua.match(/chrome/) != null) { let is360 = false let mimeTypes = navigator.mimeTypes for (var mt in mimeTypes) { if (mimeTypes[mt]['type'] === 'application/vnd.chromium.remoting-viewer') { return true } } if (is360) { browserType = '360' } else { browserType = 'Chrome' } } else if (ua.match(/safari/) != null) { browserType = 'Safari' }

return browserType } ```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值