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+dom树型菜单类,希望朋友们一起进步
May 03 Javascript
jquery select下拉框操作的一些说明
Apr 02 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
js关于命名空间的函数实例
Feb 05 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
jquery实现tab键进行选择后enter键触发click行为
Mar 29 jQuery
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
Apr 24 Javascript
Angularjs cookie 操作实例详解
Sep 27 Javascript
详解Vue源码学习之双向绑定
Apr 10 Javascript
uni-app如何页面传参数的几种方法总结
Apr 28 Javascript
JS数组reduce()方法原理及使用技巧解析
Jul 14 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 引用文件技巧
2010/03/02 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
python基础教程之面向对象的一些概念
2014/08/29 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
python dlib人脸识别代码实例
2019/04/04 Python
通过代码实例了解Python异常本质
2020/09/16 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
python用700行代码实现http客户端
2021/01/14 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
一组SQL面试题
2016/02/15 面试题
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
关于逃课的检讨书
2014/01/23 职场文书
单位租房协议书样本
2014/10/30 职场文书
作弊检讨书范文
2015/05/06 职场文书