用户代理字符串userAgent可实现的四个识别
定义
用户代理字符串:navigator.userAgent
HTTP规范明确规定,浏览器应该发送简短的用户代理字符串,指明浏览器的名称和版本号。但现实中却没有这么简单。
发展历史
【1】1993年美国NCSA国家超级计算机中心发布了世界上第一款web浏览器Mosaic,该浏览器的用户代理字符串为Mosaic/0.9
【2】Netscape公司进入浏览器开发领域,将自己产品的代号定名了Mozilla(Mosaic Killer)的简写,用户代理字符串格式为Mozilla/版本号 [语言] (平台;加密类型)
【3】IE发布的第一款赢得用户广泛认可的web浏览器IE3,当时Netscap已经占据了绝对市场份额,为了让服务器能够检测到IE,IE将用户代理字符串修改成兼容Netscape的形式:Mozilla/2.0(compatible;MSIE版本号;操作系统)
【4】各浏览器陆续出现,用户代理字符串的显示格式也越来越类似……
测试工具
利用各桌面浏览器调试工具,主要是IE调试工具及chrome的emulation手机调试工具
桌面端测试结果
【1】IE
[1.1]IE3
Mozilla/2.0 (compatible; MSIE3.02; windows 95)
[1.2]IE6
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[1.3]IE7
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
[1.4]IE8
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)
[1.5]IE9
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
[1.6]IE10
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
[1.7]IE11
Mozilla/5.0 (MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; GWX:QUALIFIED; rv:11.0) like Gecko
【2】chrome
Mozilla/5.0 (Windows NT 6.1; WOW64)G AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36
【3】safari
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
【4】firefox
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
【5】opera
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25
移动端测试结果
【1】ipad
Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53
【2】iphone
Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4
【3】android
Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36
识别浏览器内核
常见的内核有Trident、Gecko和Webkit
[注意]因为Trident和Webkit的用户代理字符串中可能会出现 like Gecko的字眼,所以最后再测Gecko
function whichEngine(){ var ua = navigator.userAgent; //Trident内核 if(/Trident/.test(ua)){ return "Trident"; } //Webkit内核 if(/WebKit/.test(ua)){ return "WebKit"; } //Gecko内核 if(/Gecko/.test(ua)){ return "Gecko"; } } console.log(whichEngine());//IE11下显示"Trident"
识别浏览器版本
【1】IE
IE3-IE10都可以通过MSIE的版本号来判断,因为有的IE11并不出现MSIE字符,且safari中也有rv字段,所以IE11需要通过rv后的版本号和Trident来配合判断
function isIE(){ var ua = navigator.userAgent; //检测Trident引擎,IE8+ if(/Trident/.test(ua)){ //IE11+ if(/rv:(\d+)/.test(ua)){ return RegExp["$1"]; } //IE8-IE10 if(/MSIE (\d+)/.test(ua)){ return RegExp["$1"]; } } //检测IE标识,IE7- if(/MSIE (\d+)/.test(ua)){ return RegExp["$1"]; } } console.log(isIE());//只有IE会返回版本号,其他浏览器都返回undefined
【2】chrome
function isChrome(){ var ua = navigator.userAgent; //先排除opera,因为opera只是在chrome的userAgent后加入了自己的标识 if(!/OPR/.test(ua)){ if(/Chrome\/(\S+)/.test(ua)){ return RegExp["$1"]; } } } console.log(isChrome());//只有Chrome会返回版本号45.0.2454.93,其他浏览器都返回undefined
【3】safari
function isSafari(){ var ua = navigator.userAgent; //先排除opera if(!/OPR/.test(ua)){ //检测出chrome和safari浏览器 if(/Safari/.test(ua)){ //检测出safari if(/Version\/(\S+)/.test(ua)){ return RegExp["$1"]; } } } } console.log(isSafari());//只有safari会返回版本号5.1.7,其他浏览器都返回undefined
【4】firefox
function isFireFox(){ if(/Firefox\/(\S+)/.test(navigator.userAgent)){ return RegExp["$1"]; } } console.log(isFireFox());//只有firefox会返回版本号40.0,其他浏览器都返回undefined
【5】opera
function isOpera(){ if(/OPR\/(\S+)/.test(navigator.userAgent)){ return RegExp["$1"]; } } console.log(isOpera());//只有opera会返回版本号32.0.1948.25,其他浏览器都返回undefined
识别操作系统
使用navigator.platform检测操作系统更加简单,因为其可能包括的值为“Win32”、“Win64”、“MacPPC”、“MacIntel”、“X11”和"Linux i686"等,且在不同浏览器中是一致的。
而通过navigator.userAgent可以来得到window系统的详细信息。
windows版本 -> 内核版本 Windows XP -> 5.1 Windows Vista -> 6.0 Windows 7 -> 6.1 Windows 8 -> 6.2 Windows 8.1 -> 6.3 Windows 10技术预览版 -> 6.4 Windows 10(Build 9880+) -> 10
function whichSyStem(){ var ua = navigator.userAgent; var pf = navigator.platform; if(/Mac/.test(pf)){ return "Mac"; } if(/X11/.test(pf) || /Linux/.test(pf)){ return "Linux"; } if(/Win/.test(pf)){ if(/Windows NT (\d+\.\d+)/.test(ua)){ switch(RegExp["$1"]){ case "5.0": return "Windows 2000"; case "5.1": return "Windows XP"; case "6.0": return "Windows Vista"; case "6.1": return "Windows 7"; case "6.2": return "Windows 8"; case "6.3": return "Windows 8.1"; case "6.4": case "10": return "Windows 10"; } } } } console.log(whichSyStem())//Windows 7
识别移动端设备
function whichMobile(){ var ua = navigator.userAgent; if(/iPhone OS (\d+_\d+)/.test(ua)){ return 'iPhone Mac' + RegExp.$1.replace("_","."); } if(/iPad.+OS (\d+_\d+)/.test(ua)){ return 'iPad Mac' + RegExp.$1.replace("_",".") } if(/Android (\d+\.\d+)/.test(ua)){ return 'Android' + RegExp["$1"]; } } console.log(whichMobile())//Android 5.1
用户代理字符串userAgent可实现的四个识别的更多相关文章
- 从注册表清理 IE10,IE11 用户代理字符串(UserAgent)中的垃圾信息
某一天,我发现我的 IE User Agent 字符串里面竟然含有刷机大师.百度浏览器等许多垃圾,国货流氓见怪不怪了. 微软自家的.NET CLR也占据了一大片,看着也不爽. 决定清理一下,但是却没找 ...
- 用户代理字符串(navigator.userAgent)检测方法
最近在看<JavaScript 高级程序设计(第三版)>,发现其中关于用户代理字符串检测技术的一些方法,觉得讲的很详细.用户代理字符串(navigator.userAgent)中包含了大量 ...
- 如何修改IE浏览器的User-Agent用户代理字符串信息
每款浏览器都有一个专属的 User-Agent 字符串信息, 通过 User-Agent 网站可以检测用户所使用的浏览器版本.某些网站为了让用户获得更好的浏览体验,通过检测用户的浏览器版本,以确认用户 ...
- 用户代理字符串识别工具源码与slf4j日志使用
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等.UA也成为了, ...
- 浏览器模式&用户代理字符串(IE)
问题问题描述今天在做项目的时候,QA部门提了一个Bug,在一个搜索列表中,搜索栏为空时刷新页面,却触发了搜索功能,并且列表显示出<未搜索到结果> 环境IE11 问题原因 QA的IE11用户 ...
- IE 11 如何设置“用户代理字符串”
"用户代理字符串"这个术语在IE11 之前被叫作“浏览器模式”(Browser Mode),在IE11下面这个特殊的选项被放在F12的“仿真”选项下面了. Figure 1通过按下 ...
- Java 判断字符串是否为空的四种方法、优缺点与注意事项
以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: ...
- 获取浏览器用户代理(user-agent)
获取浏览器用户代理(user-agent) 用户代理(user-agent)是浏览器客户端与服务器交互时的重要信息之一,用于帮助网站识别请求用户的浏览器类别,以便于网站发送相应的网页数据. 用户代理数 ...
- OC中字符串的提取与替换-四种不同方法实现
/* 1.将可变字符串 @"When I was young, I loved a girl in neighbor class."中,从 young提取到girl.替换 成@&q ...
随机推荐
- 如何给澳洲路局写信refound罚金,遇到交通罚款怎么办
在澳洲,100%的司机收到过罚单,包括停车,超速,闯红灯等等,其罚金一般都在200-500之间,当然其单位是AUD.所以,对大多数留学生来说,收到罚金意味着一个礼拜要吃吐了. 本人就收到过一次超速罚单 ...
- week7 read
对于银弹: 在<No Silver Bullet>这篇IBM大型电脑之父佛瑞德·布鲁克斯(Fred Brooks)在1987年所发表的一篇关于软体工程的经典论文中,强调了由于软件的复杂性本 ...
- 【转】IE劫持原理 BHO
为什么"浏览器劫持"能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如"我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启 ...
- windows编程:资源和播放声音
要播放声音,要附加项:winmm.lib,然后包含头文件:#include <mmsystem.h> 播放声音用PlaySound函数,只能播放midi和wav波形文件. #define ...
- 去掉tableview cell的左边间隙问题
http://www.jianshu.com/p/ba32f45222e0 简书上面的一篇文章.
- 【整理】--linux指令
1.压缩 解压 .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.g ...
- IO-03. 求整数均值(10)
本题要求编写程序,计算4个整数的和与平均值.题目保证输入与输出均在整型范围内. 输入格式: 输入在一行中给出4个整数,其间以空格分隔. 输出格式: 在一行中按照格式“Sum = 和; Average ...
- Linux内核--网络栈实现分析(四)--网络层之IP协议(上)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7514017 更多请看专栏,地址 ...
- centos6 一个vlan配置多ip地址
添加vlan [root@localhost network-scripts]# vconfig add eth1 109 配置文件,此处配置了vlan109使用子接口进行多ip配置: [root@l ...
- 我和Java有个约定
2012年8月31日,我在父亲的陪伴下,第一次登上的火车,千里迢迢从老家来到了现代化大都市--西安,目睹着这里的繁华,与从小生活的环境截然的天壤之别,蓦然间问自己,你确定这是想来的地方吗? 依稀记得曾 ...