这里对浏览器各自的userAgent特点做一分析,并给出判断方法:
Windows操作系统浏览器系列:
- IE浏览器系列:
特征表现:均以 "mozilla/" 开头,"msie x.0;" 中的x表示其版本;
判断方法:粗略判断可以只检索 "msie x.0;" 字符串即可,严格判断可检索 "mozilla/x.0 (compatibal; msie x.0; windows nt",不过一般没有这个必要 - Windows版Firefox:
特征表现:以"mozilla/x.0"开头,包含"windows nt","gecko/"和"firefox/" ;
判断方法:粗略判断可以只检索 "firefox/"和"windows nt" 字符串,严格判断可以检索"mozilla/" ,"windows nt","gecko/"和"firefox/" 四个字符串; - Windows版Chrome:
特征表现: 以"mozilla/x.0"开头,包含"windows nt","chrome/",同时包含"applewebkit/","safari/";
判断方法:粗略判断可以只检索 "windows nt"和"chrome/"字符串,严格判断可以同时检索 "mozilla/" ,"windows nt","applewebkit/","safari/","chrome/" 五个字符串; - Windows版Opera:
特征表现:以"opera/"开头,含有"windows nt","presto/" 字符串;
判断方法:粗略判断只检索 "windows nt"和"opera/"字符串,严格判断同时检索 "opera/","windows nt" 和 "presto/"; - Windows版Safari:
特征表现:以"mozilla/"开头,同时含有"windows nt","applewebkit/","safari/";
判断方法:粗略判断可以检索含有 "windows nt","safari/" 同时不包含 "chrome/",严格判断需要同时含有"mozilla/","windows nt","applewebkit/","safari/"但是不包含"chrome/"; - 小结:Windows操作系统上的浏览器userAgent均包含"windows nt"字符串来表征windows操作系统。
iPhone平台浏览器系列:
- iPhone自带safari:
特征表现:以"mozilla/"开头,含有"iphone"字符串,同时含有 "mobile/","safari/"字符串;
判断方法:粗略判断只检索 "iphone"和"safari/"字符串,严格判断则要同时包含 "mozilla/","iphone","mobile/","safari/"四个字符串 - iPhone版Opera Mobile:
特征表现: 以"opera/"开头,含有"iphone"字符串,同时含有 "opera mini/","presto/"字符串;
判断方法:粗略判断只检索 "iphone"和"opera/"字符串,严格判断则要同时包含 "opera/","iphone","opera mini/","presto/"四个字符串 - 小结:iPhone手机上的浏览器userAgent均包含"iphone"字符串
Android平台浏览器系列:
- Android自带浏览器(有人说其实是就chrome,但google自己未做表示,且还在开发一个Android上运行的Chrome to Phone):
特征表现: 以"mozilla/"开头,含有"android"和"linux" 字符串,同时含有 "applewebkit/","mobile safari/"字符串;
判断方法:因为还不知道Android上未来会不会有独立的safari(估计不会了),所以建议直接严格判断,检索 "mozilla/","android","linux","applewebkit/","mobile safari/"五个字符串 - Android版Opera Mobile:
特征表现: 以"opera/"开头,含有"android"和"linux" 字符串,同时含有 "opera mobi/","presto/"字符串;
判断方法:粗略判断只检索 "android"和"opera/",严格判断则要同时包含"opera/","android","linux","opera mobi/","presto/"五个字符串 - Android版Firefox:
特征表现:以"mozilla/"开头,含有"android"和"linux" 字符串,同时含有 "firefox/","gecko/","fennec/"字符串;
判断方法:粗略判断只检索 "android"和"firefox/",严格判断则要同时包含"mozilla/","android","linux","firefox/","gecko/","fennec/"六个字符串 - 小结:Android平台上的浏览器userAgent均包含"android"和"linux"字符串
以上对windows、iphone、android三大平台的主流浏览器解析就基本结束了,其他平台的linux估计至少与android平台应该类似,而采用了Mac OS的iPad和麦金塔应该与iphone平台类似,故而暂时先不做解析,也因为手头没有那么多设备和操作系统来测试,希望日后能够补上。
现在的网站产品开发要求跟以前又不一样了,因为不仅要满足电脑浏览,还需要满足用户通过智能手机(这里仅指iphone、android、windows phone等真正的智能手机,blackberry和palm这样的小众半智能系统暂时不考虑,至于symbian这个伪智能系统就一边玩去吧)通过以上三个具有代表性的平台,也大致可以推测出根据浏览器userAgent判断用户设备的解决方案了。
1、如果需要判断操作系统,方法比较简单,在userAgent里面检索以下字符串:
- 含有"windows nt":显而易见了,windows操作系统,nt后面的版本号可以判断OS版本;
- 含有"mac":苹果的Mac OS X或者其他Mac OS内核的系统;
- 含有"iphone":苹果iphone手机专有的,一般情况下也应该含有"mac";
- 含有"ipad":苹果iPad平板电脑(资料表明iPad的浏览器userAgent同时含有"mac","iphone","ipad");
- 含有"linux":Linux操作系统或者其他以linux作为内核的操作系统;
- 含有"android":谷歌的Android操作系统,有可能是智能手机,也有可能是安卓版的平板电脑哦,一般情况下android平台上的userAgent也应该包含"linux";
- 含有"unix","sunos","bsd"三者之一:Unix系统,其实对这个系统的用户体验问题,目前几乎可以不用考虑了;
- 含有"ubuntu":ubuntu定制版的linux
- ……
你也看到了,判断操作系统及其版本其实并不一直有用,但总有能用到的地方,比如开发专门针对iphone、ipad、android等设备屏幕分辨率的页面
2、判断浏览器的内核,方法也不困难,我自己琢磨出来的,不一定都对啊:
2、判断浏览器的内核,方法也不困难,我自己琢磨出来的,不一定都对啊:
- IE(Trident)内核(IE for Mac, IEs4Linux之类的就不用说了,只考虑windows下的):以"mozilla/"开头,含有"windows nt"和"msie"字符串;
- Firefox(Gecko)内核:以"mozilla/"开头,含有"firefox/"和"gecko/"字符串的就是啦,其中Android版的还带有"fennec/"字符串;
- Opera()内核:以"opera/"开头,含有"presto/"字符串,其中iphone版还带有"opera mini/",Android版也带有"opera mobi/";
- Webkit内核:以"mozilla/"开头,含有"applewebkit/"和"safari/"字符串,其中带有"chrome/"的就是Chrome浏览器,不带的就是Safari或其他;
- 以上就是主要的浏览器内核了
浏览器内核才是解决兼容性的关键问题所在,然而,这个兼容性问题已经有jQuery和Extjs等框架帮你解决了,因此这个判断只针对个别页面的CSS样式在不同内核渲染效果不同的情况下使用,当然了,同样的内核在智能手机和电脑等不同设备上渲染结果也不同,这一点也需要注意。
3、判断浏览器useAgent的实际应用举例:
- 不同浏览器内核对页面的渲染效果不同,虽然已经有jQuery和Extjs等为我们做了兼容处理,但是依然会有一些细小的差别需要我们单独处理,此时需要判断浏览器内核;
- 用户并不仅仅是通过电脑访问网站的,随着智能手机的日益普及还有平板电脑的大行其道,使用这两者来上网的比例越来越高,怎么办?平板电脑还好,屏幕大分辨率高,智能手机受限于他的屏幕尺寸和分辨率,虽有强劲的处理能力,也可以完美支持现有的网站,但是为客户多考虑一点总没有坏处你说对吧?毕竟通过局部缩放拖拽的方式看网页很不舒服,这时呢,我们就可以专门为iphone、android这样的窄条屏幕提供一个专用版本来布局了,一来提升浏览体验,二来降低网络流量,加快访问速度;
- 做访客流量分析,通过判断客户浏览器类型并记录其数量,来优化设计自己的网站,以分别提升其客户体验
- ……
- 来自:http://www.cnblogs.com/dowinning/archive/2011/07/22/2113981.html
相关推荐
这有助于开发者优化网站兼容性,确保网站在各种设备和浏览器上都能正常运行。本文将深入探讨如何使用Java来获取这些信息,以及如何利用特定工具类进行操作。 标题中的"UserAgent返回浏览器版本和操作系统版本工具类...
通过采用响应式设计,可以确保网站在不同设备和浏览器上都能良好显示。这样可以减少对特定浏览器类型的依赖,提高网站的通用性和兼容性。 综上所述,虽然通过JavaScript检测浏览器类型及版本是一种常见的做法,但在...
在进行Web开发时,确保网站或应用在不同的浏览器和版本上都能正常运行是至关重要的。JavaScript作为一种客户端脚本语言,可以用来检测用户浏览器的类型和版本,从而实现跨浏览器兼容性。本文将深入探讨如何使用...
这个过程涉及到浏览器窗口的尺寸变化监听、设备像素比(devicePixelRatio)的检测以及对不同浏览器的兼容处理。从提供的代码片段来看,我们可以详细分析以下几个关键知识点: 1. **事件监听**: - `window....
有时候,我们需要在测试环境中模拟浏览器的行为,例如改变`userAgent`字符串,以便于模拟不同设备或浏览器的环境。`userAgent`是浏览器发送到服务器的一个字符串,包含了浏览器类型、版本和操作系统等信息。在本篇中...
1. **WebGL指纹**:WebGL是用于在浏览器中进行3D图形渲染的API,它也依赖于硬件和驱动程序,因此不同的浏览器和设备会产生不同的WebGL渲染结果。 2. **UserAgent**:浏览器发送的UserAgent字符串包含了浏览器类型、...
经过测试,可能需要修改MainForm.cs文件UserAgent变量的值,来解决网页有时打不开的情况。 文件介绍: ndp46-targetingpack-kb3045566.exe:因为项目是.net 4.6 开发的,所以先点击安装这个,然后再启动项目 src:...
了解这些对象和属性后,开发者可以针对不同的浏览器特性进行条件判断,实现兼容性处理,或者根据用户的设备特性提供定制化的用户体验。例如,你可以检测浏览器是否支持某些HTML5特性,或者根据屏幕尺寸调整网页布局...
这个对象中,每个属性(如`isQB`、`isTablet`、`isPhone`等)都是一个布尔值,表示相应的浏览器或设备类型是否存在。 接下来,我们通过创建一个数组`html`,将检测的结果拼接成HTML字符串,然后将这个字符串插入到...
它是一个字符串,由发送请求的客户端(通常是浏览器)携带,用于标识自身的类型、版本、操作系统及设备信息。本文将基于一个包含九万条User-Agent数据的资源包,深入探讨这一关键概念及其应用。 首先,User-Agent的...
- 使用JavaScript,我们可以获取`navigator.userAgent`属性来读取User-Agent字符串,然后通过正则表达式匹配判断设备类型。 - 例如,可以编写函数来检查特定的字符串是否存在于User-Agent中,以此判断是iOS、...
在许多情况下,值判断出浏览器类型之后,还需判断浏览器版本才能处理兼容性问题,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道。 浏览器类型 ⑴浏览器特有属性 ⑵根据userAgent 浏览器版本 ⑴根据...
这段代码的核心在于分析navigator.userAgent的值,并通过正则表达式来匹配特定的字符串标识,从而判断浏览器类型。 具体代码逻辑如下: 1. 首先,获取并转换userAgent为小写字符串,以便于匹配。 2. 使用正则表达式...
例如,`navigator.userAgent`属性虽然可以提供一些信息,但解析起来可能比较复杂,因为它返回的是一个包含浏览器、操作系统、设备等信息的字符串。`mobile-detect.js`库则通过预定义的规则和模式匹配,将这些信息...
在每个媒体查询中,给一个隐藏的`.state-indicator`元素设置不同的`z-index`值,这个值代表当前设备的类型。`z-index`在CSS中用于确定元素在堆叠上下文中的层级,但在这里,它被用作传递设备状态信息给JavaScript的...
此外,为了提供语言支持,browser对象还包括了一个language属性,它通过获取navigator.browserLanguage或navigator.language属性的值,并将其转换为小写,从而识别浏览器的用户语言设置。 总结来说,文章所提到的...
在函数内部,我们使用三元运算符来判断用户的设备类型,并根据不同的设备类型来设置 window.location.href 的值。但是,为了代码的可读性和简洁性,我们可以使用 if-else 语句来实现相同的功能。 最后,我们调用 ...