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 相关文章推荐
Jquery Select操作方法集合脚本之家特别版
May 17 Javascript
浅析LigerUi开发中谨慎载入common.css文件
Jul 09 Javascript
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
Mar 25 Javascript
JavaScript中创建对象的模式汇总
Apr 19 Javascript
解析JavaScript数组方法reduce
Dec 12 Javascript
浅谈Vue 初始化性能优化
Aug 31 Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
JavaScript栈和队列相关操作与实现方法详解
Dec 07 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
Apr 23 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 代码优化之经典示例
2011/03/24 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
用一段js程序来实现动画功能
2007/03/06 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
javascript数组去重小结
2016/03/07 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
Python 3.x 新特性及10大变化
2015/06/12 Python
Python实现两款计算器功能示例
2017/12/19 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
解决yum对python依赖版本问题
2019/07/05 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
电子专业求职信
2014/06/19 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
python程序的组织结构详解
2021/12/06 Python