jquery uaMatch源代码


Posted in Javascript onFebruary 14, 2011
// Useragent RegExp 
rwebkit = /(webkit)[ \/]([\w.]+)/, 
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, 
rmsie = /(msie) ([\w.]+)/, 
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, 
// Keep a UserAgent string for use with jQuery.browser 
userAgent = navigator.userAgent, // For matching the engine and version of the browser 
browserMatch, 
// Use of jQuery.browser is frowned upon. 
// More details: http://docs.jquery.com/Utilities/jQuery.browser 
uaMatch: function( ua ) { 
ua = ua.toLowerCase(); 
var match = rwebkit.exec( ua ) || 
ropera.exec( ua ) || 
rmsie.exec( ua ) || 
ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || 
[]; 
return { browser: match[1] || "", version: match[2] || "0" }; 
} 
browserMatch = jQuery.uaMatch( userAgent ); 
if ( browserMatch.browser ) { 
jQuery.browser[ browserMatch.browser ] = true; 
jQuery.browser.version = browserMatch.version; 
}

分析:浏览器之间的兼容性问题,这个一个历史遗留问题。痛苦的是,作为一个前端开发人员得为这个兼容性问题买单。我们做开发时,往往要为每种浏览器作出局部的代码调整才能在相应的浏览器中良好的运行。我所知道的方法有两种:1.浏览器检测;2.对象检测。

在jQuery 中只要用行uaMatch()这个函数。用到的关键点有:1.regExp.exec(str);2.navigator.userAgent;

一,regExp.exec(str);用正则表达式来在字符串中查找,并返回一个数组,这个数组的0元素是整个正则匹配,1元素是第一个子匹配,2元素是第二个子匹配,如此类推。

二,navigator.userAgent:是javascript BOM的重要的对象之一,它主要用来返回当前的浏览器和操作系统的信息。

例如:firefox的navigator.userAgetn 的字符串:"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"

 IE8的navigator.userAgetn的字符串:"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)".

从各个浏览器的正则表达式可知,第一个子匹配为浏览器的名字,第二个为版本。

Javascript 相关文章推荐
JAVASCRIPT 对象的创建与使用
Mar 09 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
Jul 25 Javascript
BootStrap glyphicons 字体图标实现方法
May 01 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
Sep 21 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
vue 将页面公用的头部组件化的方法
Dec 18 Javascript
JavaScript 中使用 Generator的方法
Dec 29 Javascript
详解html-webpack-plugin插件(用法总结)
Sep 12 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
Sep 18 Javascript
ant design实现圈选功能
Dec 17 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
Jul 23 Javascript
一篇文章了解正则表达式的替换技巧
Feb 24 Javascript
AJAX 网页保留浏览器前进后退等功能
Feb 12 #Javascript
一些主流JS框架中DOMReady事件的实现小结
Feb 12 #Javascript
javascript中删除指定数组中指定的元素的代码
Feb 12 #Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 #Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 #Javascript
URL地址中的#符号使用说明
Feb 12 #Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 #Javascript
You might like
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
python 实现超级玛丽游戏
2020/11/25 Python
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
党的群众路线整改落实情况汇报
2014/10/28 职场文书
教师群众路线心得体会
2014/11/04 职场文书
走群众路线学习笔记
2014/11/06 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL