javascript 检测浏览器类型和版本的代码


Posted in Javascript onSeptember 15, 2009

检测浏览器及其版本的代码

getBrowser : function(){ 
var browser = { 
msie: false, firefox: false, opera: false, safari: false, 
chrome: false, netscape: false, appname: 'unknown', version: 0 
}, 
userAgent = window.navigator.userAgent.toLowerCase(); 
if ( /(msie|firefox|opera|chrome|netscape)\D+(\d[\d.]*)/.test( userAgent ) ){ 
browser[RegExp.$1] = true; 
browser.appname = RegExp.$1; 
browser.version = RegExp.$2; 
} else if ( /version\D+(\d[\d.]*).*safari/.test( userAgent ) ){ // safari 
browser.safari = true; 
browser.appname = 'safari'; 
browser.version = RegExp.$2; 
} 
return browser.appname + browser.version; 
}

对象/特征检测法

该方法是一种判断浏览器能力(而非浏览器的确切型号)的通用方法。大部分JS专家认为这个方法最合适,因为他们认为按照该方法所编写的脚本是经得起未来考验的。

//获取IE浏览器的版本号
//返回数值,显示IE的主版本号
function getIEVer() {
var ua = navigator.userAgent; //获取用户端信息
var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置
if (b < 0) {
return 0;
}
return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值
}

alert(getIEVer()); //返回数值8(我的IE8)

如果更关注浏览器的能力而不在乎它实际的身份,就可以使用这种方法。

user-agent字符串检测法

user-agent字符串提供了关于Web浏览器的大量信息,包括浏览器的名称和版本。

var ua = navigator.userAgent.toLowerCase(); //获取用户端信息
var info = {
ie: /msie/.test(ua) && !/opera/.test(ua),  //匹配IE浏览器
op: /opera/.test(ua),  //匹配Opera浏览器
sa: /version.*safari/.test(ua),  //匹配Safari浏览器
ch: /chrome/.test(ua),  //匹配Chrome浏览器
ff: /gecko/.test(ua) && !/webkit/.test(ua)  //匹配Firefox浏览器
};
(info.ie) && alert("IE浏览器");
(info.op) && alert("Opera浏览器");
(info.sa) && alert("Safari浏览器");
(info.ff) && alert("Firefox浏览器");
(info.ch) && alert("Chrome浏览器");

通常我们做得最多的,就是判断是否是IE了,其它几种浏览器一般都会符合标准.有些客户只需要符合IE和FF就已经满足了.那么我们可以这样做:

var isIE = (navigator.appName == "Microsoft Internet Explorer");

判断IE远远不止上面一种方法,可以使用IE更多特有的东西,如:window.ActiveXObject,document.all等,这些都属于对象/特征检测法了!通常要在不同的浏览器上写不同的样式(因为IE样式解析也各有不同),那就得判断版本了.可以这样做

//获取IE浏览器的版本号
//返回数值,显示IE的主版本号
function getIEVer() {
var ua = navigator.userAgent; //获取用户端信息
var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置
if (b < 0) {
return 0;
}
return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值
}

alert(getIEVer()); //返回数值7

检测操作系统:

var isWin = (navigator.userAgent.indexOf("Win") != -1); //如果是Windows系统,则返回true
var isMac = (navigator.userAgent.indexOf("Mac") != -1);  //如果是Macintosh系统,则返回true
var isUnix = (navigator.userAgent.indexOf("X11") != -1);  //如果是Unix系统,则返回true
var isLinux = (navigator.userAgent.indexOf("Linux") != -1);  //如果是Linux系统,则返回true

文章大部分内容来自于《Javascript征途》

Javascript 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
javascript椭圆旋转相册实现代码
Jan 16 Javascript
计算新浪Weibo消息长度(还可以输入119字)
Jul 02 Javascript
jQuery实现精美的多级下拉菜单特效
Mar 14 Javascript
AngularJS包括详解及示例代码
Aug 17 Javascript
js HTML5 canvas绘制图片的方法
Sep 08 Javascript
浅谈React Native 中组件的生命周期
Sep 08 Javascript
vue-router beforeEach跳转路由验证用户登录状态
Dec 26 Javascript
微信小程序的线程架构【推荐】
May 14 Javascript
vue页面加载时的进度条功能(实例代码)
Jan 13 Javascript
js的Object.assign用法示例分析
Mar 05 Javascript
在vue中使用vant TreeSelect分类选择组件操作
Nov 02 Javascript
不安全的常用的js写法
Sep 15 #Javascript
Mootools 1.2教程 滑动效果(Slide)
Sep 15 #Javascript
Mootools 1.2教程 同时进行多个形变动画
Sep 15 #Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 #Javascript
Mootools 1.2教程 选项卡效果(Tabs)
Sep 15 #Javascript
Mootools 1.2教程 Tooltips
Sep 15 #Javascript
Mootools 1.2教程 类(一)
Sep 15 #Javascript
You might like
在线短消息收发的程序,不用数据库
2006/10/09 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
奇妙的js
2007/09/24 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
创建nuxt.js项目流程图解
2020/03/13 Javascript
python类继承用法实例分析
2014/10/10 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
Python subprocess模块详细解读
2018/01/29 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
Python zip函数打包元素实例解析
2019/12/11 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
骨干教师培训制度
2014/01/13 职场文书
机关门卫制度
2014/02/01 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
公务员年终个人总结
2015/02/12 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS