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 的一个progressbar widge
Oct 29 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
Nov 18 Javascript
Jquery实现自定义tooltip示例代码
Feb 12 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
web打印小结
Jan 11 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
Node.js 中使用 async 函数的方法
Nov 20 Javascript
vue better scroll 无法滚动的解决方法
Jun 07 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 Javascript
解决node终端下运行js文件不支持ES6语法
Apr 04 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
jQuery 表格插件整理
2010/04/27 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
电大本科自我鉴定
2014/02/05 职场文书
诚信考试倡议书
2014/04/15 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
银行转正自我鉴定
2014/09/29 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
python爬虫之selenium库的安装及使用教程
2021/05/23 Python