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 相关文章推荐
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
May 04 Javascript
javascript父子页面通讯实例详解
Jul 17 Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 Javascript
jQuery之动画效果大全
Nov 09 Javascript
微信小程序 navbar实例详解
May 11 Javascript
vue添加axios,并且指定baseurl的方法
Sep 19 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
Sep 30 Javascript
JS实现电话号码的字母组合算法示例
Feb 26 Javascript
详解vue-cli3 中跨域解决方案
Apr 10 Javascript
JS使用正则表达式提交页面验证的代码
Oct 16 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
Jan 14 Javascript
ES6的循环与可迭代对象示例详解
Jan 31 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代码
2012/06/08 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
python sys.argv[]用法实例详解
2018/05/25 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
Python根据成绩分析系统浅析
2019/02/11 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
使用npy转image图像并保存的实例
2020/07/01 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
机电专业毕业生推荐信
2013/11/10 职场文书
军训的自我鉴定
2013/12/10 职场文书
食品安全工作实施方案
2014/03/26 职场文书
团队精神的演讲稿
2014/05/14 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript