使用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 相关文章推荐
jquery ajax 登录验证实现代码
Sep 23 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
Apr 01 Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 Javascript
JQuery记住用户名和密码的具体实现
Apr 04 Javascript
node.js中的emitter.on方法使用说明
Dec 10 Javascript
jQuery中:radio选择器用法实例
Jan 03 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
Jan 17 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
bootstarp modal框居中显示的实现代码
Feb 18 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
Dec 14 Javascript
vue后台管理之动态加载路由的方法
Aug 13 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
银行学习十八大感想
2014/01/11 职场文书
运动会入场解说词
2014/02/07 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
关于工作经历的证明书
2014/10/11 职场文书
单身申明具结书
2015/02/26 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
杨善洲观后感
2015/06/04 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
浅谈克隆 JavaScript
2021/11/02 Javascript
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技
python playwright 自动等待和断言详解
2021/11/27 Python