使用js检测浏览器的实现代码


Posted in Javascript onMay 14, 2013

在写跨浏览器的js程序中,检测浏览器是一个很重要的工作。我们不时要为不同的浏览器写分支代码。
如下是一种:

//添加事件工具函数
function addEvent(el,type,handle){
    if(el.addEventListener){//for standard browses
        el.addEventListener(type,handle,false);
    }else if(el.attachEvent){//for IE
        el.attachEvent("on"+event,handle);
    }else{//other
        el["on"+type]=handle;
    }
}

1,第一种检测浏览器方式称为 user-agent 检测方式。是最古老的,它检测目标浏览器的确切型号,包括浏览器的名称和版本。其实就是一个字符串,用navigator.userAgen或navigator.appName获取。如下:
function isIE(){
    return navigator.appName.indexOf("Microsoft Internet Explorer")!=-1 && document.all;
}
function isIE6() {
    return navigator.userAgent.split(";")[1].toLowerCase().indexOf("msie 6.0")=="-1"?false:true;
}
function isIE7(){
    return navigator.userAgent.split(";")[1].toLowerCase().indexOf("msie 7.0")=="-1"?false:true;
}
function isIE8(){
    return navigator.userAgent.split(";")[1].toLowerCase().indexOf("msie 8.0")=="-1"?false:true;
}
function isNN(){
    return navigator.userAgent.indexOf("Netscape")!=-1;
}
function isOpera(){
    return navigator.appName.indexOf("Opera")!=-1;
}
function isFF(){
    return navigator.userAgent.indexOf("Firefox")!=-1;
}
function isChrome(){
    return navigator.userAgent.indexOf("Chrome") > -1;  
}

2,第二种称为 对象/特征 检测方式,这是一种判断浏览器能力的方式,也是目前流行的方式。即在使用一个对象之前检测它是否存在。上面提到的addEvent方法中就使用了该方式。.addEventListener是w3c dom标准方式,而IE使用自己特有attachEvent。以下列举几个:

a,talbe.cells只有IE/Opera支持。

b,innerText/insertAdjacentHTML除Firefox外,IE6/7/8/Safari/Chrome/Opera都支持。

c,window.external.AddFavorite用来在IE下添加到收藏夹。

d,window.sidebar.addPanel用来在FF下添加到收藏夹。

3,第三种很有趣,暂且称为 浏览器缺陷或bug 方式,即某些表现不是浏览器厂商刻意实现的。如下:

var isIE = !+"\v1";
var isIE = !-[1,];
var isIE = "\v"=="v";
isSafari=/a/.__proto__=='//';
isOpera=!!window.opera;

最经典的莫过于 !-[1,] 的判断方式,目前最少代码判断IE的方式,只需6个byte。这是个俄国人 发现的。利用了数组[1,]的length。还有来自英国的年轻 James Padolsey 利用IE条件注释
var ie = (function(){
    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    ); 
    return v > 4 ? v : undef
}());

被称为史上最有创意的IE判断。

注1:isIE = "\v" == "v" 方式IE9已经修复该bug,不能用此方式判断IE浏览器了(2010-6-29用IE9 pre3测试的)

Javascript 相关文章推荐
JS 分号引起的一段调试问题
Jun 18 Javascript
jquery ready()的几种实现方法小结
Jun 18 Javascript
编写Js代码要注意的几条规则
Sep 10 Javascript
js替换字符串的所有示例代码
Jul 23 Javascript
DIV始终居中的js代码
Feb 17 Javascript
javascript日期格式化示例分享
Mar 05 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
Nov 28 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
Apr 15 Javascript
微信小程序实现通讯录列表展开收起
Nov 18 Javascript
Javascript 垃圾收集机制介绍理解
May 14 #Javascript
JavaScript实现GriwView单列全选(自写代码)
May 13 #Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 #Javascript
js 程序执行与顺序实现详解
May 13 #Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
May 13 #Javascript
JS 加入收藏夹的代码(主流浏览器通用)
May 13 #Javascript
jQuery实现长文字部分显示代码
May 13 #Javascript
You might like
PHP 文件类型判断代码
2009/03/13 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
Javascript实现的分页函数
2006/12/22 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
js实现放大镜特效
2017/05/18 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
Python合并字符串的3种方法
2015/05/21 Python
python 使用get_argument获取url query参数
2017/04/28 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
经典演讲稿汇总
2014/05/19 职场文书
公司承诺书怎么写
2014/05/24 职场文书
提拔干部考察材料
2014/05/26 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
优秀班集体申报材料
2014/12/25 职场文书
初三毕业评语
2014/12/26 职场文书
颐和园导游词400字
2015/01/30 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
同意落户证明
2015/06/19 职场文书
公司晚宴祝酒词
2015/08/11 职场文书