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 相关文章推荐
简单几行JS Code实现IE邮件转发新浪微博
Jul 03 Javascript
JS正则验证邮箱的格式详细介绍
Nov 19 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
移动端js图片查看器
Nov 17 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
详解angular路由高亮之RouterLinkActive
Apr 28 Javascript
基于Vue 撸一个指令实现拖拽功能
Oct 09 Javascript
Vue实现手机扫描二维码预览页面效果
May 28 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 Javascript
在Angular项目使用socket.io实现通信的方法
Jan 05 Javascript
react中props 的使用及进行限制的方法
Apr 28 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
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
python通过smpt发送邮件的方法
2015/04/30 Python
Python函数式编程
2017/07/20 Python
python获取代理IP的实例分享
2018/05/07 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
python文字转语音实现过程解析
2019/11/12 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
开放系统互连参考模型
2016/06/29 面试题
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
中国央视网签名寄语
2014/01/18 职场文书
校园运动会广播稿
2014/10/06 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
小学教师求职信范文
2015/03/20 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
2019销售早会主持词
2019/06/27 职场文书