摘要:获取浏览器类型和版本介绍完浏览器的信息,下面就是写正则来判断了根据关系进行判断从关系判断中,我们会发现判断的顺序很重要,原因是很多浏览器都是多核的。参考判断浏览器的方法总结判断浏览器类型及版本新增判断浏览器类型的方法总结欢迎访问我的博客。
最近碰到了一个问题,判断浏览器的类型,我们熟知的 IE, Firefox, Opera, Safari, Chrome 五款比较有名的浏览器,有时候需要考虑兼容性问题,当然,即使是同一款浏览器,不同的 version 也会带来很多麻烦。
在 Chrome 没有出来之前,IE 一直都是浏览器行业的领袖和标准,但是 IE 的难用简直了。Chrome 的核心是 Webkit,它开源了一套浏览器引擎 chromium,然后现在好多浏览器都采用多核,这给判断浏览器的类型带来不少麻烦。
js 判断浏览器的类型,使用的是 JavaScript Navigator 对象的,说白了还是通过正则表达式去匹配字段。当然这里也有很多大牛总结的经验,传送门1,传送门2,传送门3。
各大浏览器的 userAgent 值首先需要知道 navigator 接口对象的值表示哪些意思,Navigator MDN。
作为一个前端,常备各种浏览器,用来调试浏览器的兼容。下面是各大浏览器输出 navigator.userAgent 的值:
IE 8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
IE 11:Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko
win EDGE:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
FireFox:Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
Chrome:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Opera:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56
Safari:mozilla/5.0 (windows; u; windows nt 5.1; zh-cn) applewebkit/533.16 (khtml, like gecko) version/5.0 safari/533.16
360安全浏览器:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
QQ浏览器:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.1708.400 QQBrowser/9.5.9635.400
IE 11 版本比之前版本的 userAgent 发生很大的变化,你现在从网上搜的话,发现很多代码都无法支持 ie 11 的判断,上限是 ie 10。
下面针对列表中的浏览器,总结了一下:
IE 10 之前的版本,匹配关键字 MSIE 8.0;
IE 11 要通过 rv:11.0) like Gecko 来匹配;
EDGE 通过 Edge/12.10240;
Firefox 通过 Firefox/49.0;
Chrome 通过 Chrome/54.0.2840.71,但是会发现,后面的浏览器都是基于 Chrome 内核(safari 除外),但是 Chrome 又是基于 safari 内核的。。
Opera 通过 OPR/41.0.2353.56,但是网上普遍是通过 opera 字段,我这款浏览器没有 opera 字段,难道是盗版?
Safari 通过 safari/533.16 来匹配;
360 和 QQ 都是基于 Chrome 内核的,当然 QQ 还能通过 QQBrowser/9.5.9635.400,如果你高兴去匹配的话。
获取浏览器类型和版本介绍完浏览器的 userAgent 信息,下面就是写正则来判断了:
function getExplore(){ var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/rv:([d.]+)) like gecko/)) ? Sys.ie = s[1] : (s = ua.match(/msie ([d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/edge/([d.]+)/)) ? Sys.edge = s[1] : (s = ua.match(/firefox/([d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/(?:opera|opr).([d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/chrome/([d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/version/([d.]+).*safari/)) ? Sys.safari = s[1] : 0; // 根据关系进行判断 if (Sys.ie) return ("IE: " + Sys.ie); if (Sys.edge) return ("EDGE: " + Sys.edge); if (Sys.firefox) return ("Firefox: " + Sys.firefox); if (Sys.chrome) return ("Chrome: " + Sys.chrome); if (Sys.opera) return ("Opera: " + Sys.opera); if (Sys.safari) return ("Safari: " + Sys.safari); return "Unkonwn"; }
从关系判断中,我们会发现判断的顺序很重要,原因是很多浏览器都是多核的。
如果只是简单判断浏览器类型,不需要知道版本号,还可以通过下面的方法(此方法也可以用正则改成匹配版本号):
function getExploreName(){ var userAgent = navigator.userAgent; if(userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1){ return "Opera"; }else if(userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1){ return "IE"; }else if(userAgent.indexOf("Edge") > -1){ return "Edge"; }else if(userAgent.indexOf("Firefox") > -1){ return "Firefox"; }else if(userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1){ return "Safari"; }else if(userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1){ return "Chrome"; }else if(!!window.ActiveXObject || "ActiveXObject" in window){ return "IE>=11"; }else{ return "Unkonwn"; } }
同样,判断顺序很重要。
window 用户可以通过修改注册表来更改 userAgent 内容,会对判断造成影响,不知道还有没有其他的更好的方法来判断。
一些其他手段如果只是单单判断是否是 IE 浏览器,那就好办了,可以通过一些特有函数来判断。
比如 window.attachEvent 在 IE<=10 是有定义的,其他浏览器是 underfined。
if(window.attachEvent){ console.log("IE <= 10"); }else{ console.log("not IE or IE >=11"); }总结
最近在弄一个非常有意思的烟花特效,基于 canvas,但是有一个非常严重的问题是在 Chrome 内核的浏览器下运行很流畅,在 Firefox 或 Safari 下面就很卡,IE 下面也是惨不忍睹,这让我对 Chrome 又有了一个新的认识。项目地址,DEMO 地址。
参考js/jquery判断浏览器的方法总结
JavaScript判断浏览器类型及版本(新增IE11)
JS判断浏览器类型的方法总结
欢迎访问我的博客。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91168.html
摘要:如果传递的参数是,将递归复制当前节点的所有子孙节点。的话只复制当前节点。设置内容时,能将里面的标签渲染成正常的标签。 DOM由节点组成 在 HTML DOM (文档对象模型)中,每个部分都是节点:文档本身是文档节点所有 HTML 元素是元素节点所有 HTML 属性是属性节点HTML 元素内的文本是文本节点注释是注释节点 1.重要节点类型:标签(元素)节点,属性节点,文本节点。 2.重要...
摘要:如果传递的参数是,将递归复制当前节点的所有子孙节点。的话只复制当前节点。设置内容时,能将里面的标签渲染成正常的标签。 DOM由节点组成 在 HTML DOM (文档对象模型)中,每个部分都是节点:文档本身是文档节点所有 HTML 元素是元素节点所有 HTML 属性是属性节点HTML 元素内的文本是文本节点注释是注释节点 1.重要节点类型:标签(元素)节点,属性节点,文本节点。 2.重要...
摘要:在用户执行粘贴操作的时候,能够获得剪切板的内容,本文讨论一下这个问题。目前只有支持获取剪切板中的图片数据。这么多的判断条件,基本可以确定通过剪切板过来的是粘贴的文件。 在用户执行粘贴操作的时候,js能够获得剪切板的内容,本文讨论一下这个问题。 目前只有Chrome支持获取剪切板中的图片数据。还好需要这个功能的产品目前只支持Chrome和Safari,一些Chrome的新特性是可以尽情使...
摘要:通过管理组件通信通过驱动视图比较差异进行更新操作作者第七页链接来源知乎著作权归作者所有,转载请联系作者获得授权。达到无刷新的效果。对象的状态不受外界影响。对象代表一个异步操作,有三种状态进行中已完成,又称和已失败。 以下问题解释非本人原创,是根据面试经验整理后觉得更容易理解的解释版本,欢迎补充。 一. 输入url后的加载过程 从输入 URL 到页面加载完成的过程中都发生了什么 计算机...
阅读 768·2023-04-26 00:30
阅读 2661·2021-11-23 09:51
阅读 1026·2021-11-02 14:38
阅读 2525·2021-09-07 10:23
阅读 2207·2021-08-21 14:09
阅读 1264·2019-08-30 10:57
阅读 1589·2019-08-29 11:20
阅读 1112·2019-08-26 13:53