在项目开发中,会经常性遇到兼容性问题,而在这个时候,我们迫切的希望能够立即知道到底是哪个浏览器的哪个版本出了问题,以便于及时修正,所以需要在项目中添加客户端浏览器嗅探代码。经过查阅资料,并对比了各个浏览器下的userAgent信息。
1、 userAgent
通过对比userAgent,可以发现: 一般情况下,无论是原生内核浏览器还是壳牌浏览器,一般都会在浏览器中添加自己的浏览器名称和版本号标识,这个时候我们基本上能够确定用户所使用的浏览器的名称、版本号、内核、操作系统名称及版本、平台位数等诸多信息。甚至在有些手机上,甚至可以获取到手机的型号和版本。
由于壳牌浏览器一般是在保留原生内核信息的基础上添加自己的独特标识信息,因此确定壳牌浏览器的名称是非常方便的。同样因为这个原因,判断原生浏览器的名称便稍微麻烦一些。最麻烦的是收集各个浏览器下的ua信息。
这里以Oprea浏览器(50.0.2762版本)为例,说说userAgent字符串中一些关键字所代表的含义:
(1)Mozilla/5.0:表示兼容或假装兼容早已不存在的Mozilla浏览器。目前所有的浏览器都拥有该标识,对于浏览器嗅探没有任何帮助;
(2)Windows NT 10.0:表示操作系统名称及版本,Windows NT 10.0即表示Windows10系统;
(3)WOW64:表示操作系统位数为64为操作系统;
(4)AppleWebKit/537.36 (KHTML, like Gecko): 这一串表示使用的内核是Webkit537.36版本为基础的,同时假装自己兼容Gecko,而渲染引擎是KHTML;
(5)Chrome/63.0.3239.132: 表示的是浏览器的名称和版本号,如果是原生内核浏览器,这就是浏览器的名称和版本号;
(6)Safari/537.36: 表示以Safari/537.36版本为基础进行开发的。
(7)OPR/50.0.2762.67: 表示Oprea浏览器的名称和版本。如果是壳牌浏览器,这就是浏览器的名称和版本号,而这样的方式一般就是壳牌浏览器所采用的ua标识策略。
警告:鉴于现代浏览器的ua信息可以随意更改变换,所以通过ua信息获取到的所有信息均无法保证所获取的信息的真实性。
2、内核
书写本文章的时候(2018.01),市场上主流的浏览器内核分为Trident、Gecko、Webkit、Blink、Edge、Presto(已废弃)。
Trident内核主要用于Internet Exporer浏览器;Gecko主要用于FireFox浏览器;Webkit主要是Safari、旧版Chrome(<28之前的版本);Blink内核主要是现在的Chrome、Oprea(>15之后的版本)浏览器;Edge内核主要是Microsoft Edge浏览器;Presto主要用于旧版Oprea浏览器。
通过观察,我们完全能够根据userAgent中包含的内核信息,判断出来用户使用的浏览器的内核及版本。而这些对于兼容性调试来说,基本上足够了。
3、userAgent 信息网站网址收录
Web User Agents Database: http://www.webuseragents.com/
fynas实用小工具-手机userAgent库:http://www.fynas.com/ua
User Agent String.Com: http://www.useragentstring.com/
Who is Hosting this: https://www.whoishostingthis.com/tools/user-agent/