检测插件
检测浏览器中是否安装了特定的插件是一种常见的检测例程。对于非IE浏览器,可以使用plugins数组来达到这个目的
/**
*
* 在Firefox,Safari、Opera和Chrome中可以通过navigator.plugins来检测
*/
function hasPlugin(name) {
name = name.toLowerCase();
//使用navigator.plugins数组遍历
for (var i = 0; i < navigator.plugins.length; i++) {
if (navigator.plugins[i].name.toLowerCase().indexOf(name) > -1) {
return true;
}
}
return false;
}
alert(hasPlugin("Flash"));
/**
* 检测IE中的插件比较麻烦,因为IE不支持Netscape式的插件。
* 在IE中检测插件的唯一方式是使用专门的ActiveXObject类型,并尝试创建一个特定插件的实例
* IE是以COM对象的方式实现插件的,而COM插件使用唯一标识符来标识。
* 因此想要检查特定的插件,就必须知道COM标识符。例如Flash的标识符是ShockwaveFlash.ShockwaveFlash
* @param name
*/
function hasIEPlugin(name) {
try {
//如果创建未知COM对象会导致抛出错误。
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;
}
alert(hasFlash());
alert(hasQuickTime());