JavaScript检测浏览器的三种主要方式详解

作者:流萤

时间:2026-10-27

浏览:467

本文详细介绍JavaScript中检测浏览器的三种核心方法:基于User-Agent字符串的传统检测、基于对象存在的特征检测以及利用浏览器缺陷的非常规手段。文章通过具体代码示例,分析了各方法的适用场景、优缺点及注意事项,特别指出了IE9后部分Bug检测方式失效的情况,帮助开发者在跨浏览器开发中做出合理选择。

文章目录

JavaScript浏览器检测概述

在开发跨浏览器兼容的JavaScript程序时,识别当前浏览器类型是一项关键任务。为了适配不同浏览器的特性,开发者经常需要编写条件分支代码。

以下是一种基础实现示例:

// 添加事件监听器的工具函数
function addEvent(el,type,handle){
if(el.addEventListener){//针对标准浏览器
el.addEventListener(type,handle,false);
}else if(el.attachEvent){//针对IE浏览器
el.attachEvent("on"+event,handle);
}else{//其他浏览器
el["on"+type]=handle;
    }
}

1,

User-Agent字符串检测

第一种检测方式称为User-Agent检测。这是最古老且直接的方法,通过读取浏览器确切的型号、名称和版本信息来进行判断。通常通过访问navigator.userAgent或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. table.cells属性仅IE和Opera支持。

b. innerText/insertAdjacentHTML属性除Firefox外,IE6/7/8/Safari/Chrome/Opera均支持。

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

d. window.sidebar.addPanel用于在Firefox下添加到收藏夹。

利用浏览器缺陷进行检测

第三种方式较为特殊,可称为浏览器缺陷(Bug)检测。即利用某些非厂商刻意实现的行为差异进行判断。示例代码如下:

代码如下:

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

此外,还有一种被称为极具创意的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中已被修复,因此无法再用于判断IE浏览器(基于2010-6-29使用IE9 pre3版本的测试结果)。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章