navigator对象是识别客户端浏览器的事实标准。来看看最常见的检测例子,检测插件:
//检测插件(在IE中无效)
function hasPlugin(name) {
//传入的参数变成小写,便于比较
name = name.toLowerCase();
for(var i = 0; i < navigator.plugins.length; i++) {
//迭代plugins数组,通过indexOf()检测name属性是否存在
if(navigator.plugins[i].name.toLowerCase()
.indexOf(name) > -1) {
return true;
}
}
return false;
}
//检测Flash
alert(hasPlugin('Flash'));
看看IE是如何检测插件的(唯一方式是使用ActiveXObject类型,并尝试创建一个特定插件的实例):
//检测IE中的插件
function hasIEPlugin(name) {
try {
new ActiveXObject(name);
return true;
} catch(ex) {
return false;
}
}
//检测Flash
alert(hasIEPlugin('ShockwaveFlash.ShockwaveFlash'));
接下来看看通用的代码:
//检测所有浏览器中的Flash
function hasFlash() {
var result = hasPlugin('Flash');
if(!result) {
result = hasIEPlugin('ShockwaveFlash.ShockwaveFlash');
return result;
}
}
//检测所有浏览器中的QuickTime
function hasQuickTime() {
var result = hasPlugin('QuickTime');
if(!result) {
result = hasIEPlugin('QuickTime.QuickTime');
return result;
}
}
//检测Flash
alert(hasFlash());
//检测QuickTime
alert(hasQuickTime);