当前位置: 首页 > news >正文

最简单的浏览器检测JavaScript代码

在写跨浏览器的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测试的)

相关文章:

  • http statusCode(状态码)
  • 一步一步学Silverlight 2系列(5):实现简单的拖放功能
  • iis报错
  • Xcode 添加 Cocos2d-x Scene 模板
  • java jdk下载与配置
  • 简单的javascript代码给页面一个奇迹
  • java常用四种排序源代码
  • Dave Python 练习二
  • 使Apache实现gzip压缩
  • Factory模式
  • 浏览器 制作---TWebBrowser 控件
  • Linux 下开启ssh服务(转)
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • Flex Actionscript 3 flash游戏 键盘 连招 连按 combo 同时按 事件处理
  • CAS实现SSO单点登录原理
  • 03Go 类型总结
  • Angular6错误 Service: No provider for Renderer2
  • const let
  • DataBase in Android
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • iOS | NSProxy
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Kibana配置logstash,报表一体化
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Xmanager 远程桌面 CentOS 7
  • 关于springcloud Gateway中的限流
  • 记录:CentOS7.2配置LNMP环境记录
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 在Mac OS X上安装 Ruby运行环境
  • 【云吞铺子】性能抖动剖析(二)
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • #includecmath
  • #include到底该写在哪
  • (20050108)又读《平凡的世界》
  • (6)STL算法之转换
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (vue)页面文件上传获取:action地址
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)从 Java 代码到 Java 堆
  • .Net 6.0 处理跨域的方式
  • .NET 药厂业务系统 CPU爆高分析
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /var/log/cvslog 太大
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [BUUCTF 2018]Online Tool
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页