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 相关文章推荐
jquery构造器的实现代码小结
May 16 Javascript
JS页面延迟执行一些方法(整理)
Nov 11 Javascript
将form表单中的元素转换成对象的方法适用表单提交
May 02 Javascript
jQuery中die()方法用法实例
Jan 19 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
BootStrap实用代码片段之一
Mar 22 Javascript
js弹出窗口返回值的简单实例
May 28 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 Javascript
JS运动特效之完美运动框架实例分析
Jan 24 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
vue实现一个炫酷的日历组件
Oct 08 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
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
vuex直接赋值的三种方法总结
2018/09/16 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
Python中遍历列表的方法总结
2019/06/27 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python列表切片常用操作实例解析
2020/03/10 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
消防器材管理制度
2014/01/28 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
正科级干部考察材料
2014/05/29 职场文书
部门2014年度工作总结
2014/11/12 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
工作简历自我评价
2015/03/11 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android