在使用JS时,我们为了保证浏览器的兼容及通用性,我们需要对浏览器是否支持相应插件进行检测,接下来由南昌网站设计公司技术人员向大家介绍浏览器插件检测方法及注意事项.
检测浏览器中是否安装了特定的插件是一种最常见的检测例程。对于非IE浏览器,可以使用plugins数组来达到这个目的。该数组中的每一项都包含下列属性:
□name:插件的名字;
□description:插件的描述;
□filename:插件的文件名;
□length:插件所处理的MIME类型数量。
一般来说,name属性中会包含检测插件必需的所有信息,但有时候也不完全如此。在检测插件时,需要像下面这样循环迭代每个插件并将插件的name与给定的名字进行比较:
//检测插件(在IE中无效)
function hasPlugin( name){
name=name.toLowerCase();
for (var i=0; i if (navigator. plugins[i].name. toLowerCase().indexOf (name)>-1)(
return true;
}
}
return false;
}
//检测Flash
alert (hasPlugin("Flash"));
//检测 QuickTime
alert (hasPlugin("QuickTime"));
//检测Java
alert (hasPlugin( "Java"));
这个hasPlugin()函数接受一个参数:要检测的插件名。第一步是将传人的名称转换为小写形式,以便于比较。然后,迭代plugins数组,通过indexOf()检测每个name属性,以确定传人的名称是否出现在字符串的某个地方。比较的字符串都使用小写形式可以避免因大小写不一致导致的错误。而传人的参数应该尽可能具体,以避免混淆。应该说,像Flash和QuickTime这样的字符串就比较具体了,不容易导致混淆。在Firefox、Safari、Opera和Chrome中可以使用这种方法来检测插件。
检测IE中的插件比较麻烦,因为IE不支持Netscape式的插件。在IE中检测插件的唯一方式就是使用专有的ActiveXObject类型,并尝试创建一个特定插件的实例。IE是以COM对象的方式实现插件的,而COM对象使用唯一标识符来标识。因此,要想检查特定的插件,就必须知道其COM标识符。例如,Flash的标识符是ShockwaveFlash.ShockwaveFlash。知道唯一标识符之后,就可以编写类似下面的函数来检测IE中是否安装相应插件了:
//检测IE中的插件
function hasIEPlugin (name){
try{
new ActiveXObj ect (name);
return true;
} catch(ex){
return false;
}
}
//检测Flash
alert (hasIEPlugin("ShockwaveFlash. ShockwaveFlash"))
//检测 QuickTime
alert( hasIEPlugin("QuickTime. QuickTime“));
在这个例子中,函数hasIEPlugin()只接收一个COM标识符作为参数。在函数内部,首先会尝试创建一个COM对象的实例。之所以要在try-catch语句中进行实例化,南昌网络公司技术员提示大家是因为创建未知COM对象会导致抛出错误。这样,如果实例化成功,则函数返回true;否则,如果抛出了错误,则执行catch块,结果就会返回false。例子最后检测IE中是否安装了Flash和QuickTime插件。
鉴于检测这两种插件的方法差别太大,因此典型的做法是针对每个插件分别创建检测函数,而不是使用前面介绍的通用检测方法。来看下面的例子:
//检测所有浏览器中的Flash
function hasFlash()(
var result=hasPlugin("Flash");
if(!result){
result=hasIEPlugin("ShockwaveFlash. ShockwaveFlash");
}
return result;
}
//检测所有浏览器中的QuickTime
f unc tion hasQuickTime(){
var result=hasPlugin("QuickTime");
if(!result){
result=hasIEPlugin("QuickTime. QuickTime");
}
return result;
}
//检测Flash
alert(hasFlash());
//检测 QuickTime
alert (hasQuickTime());
上面代码中定义了两个函数:hasFlash()和hasQuickTime()。每个函数都是先尝试使用不针对IE的插件检测方法。如果返回了false(在IE中会这样),那么再使用针对IE的插件检测方法。如 果IE的插件检测方法再返回false,则整个方法也将返回false。只要任何一次检测返回true,整个方法都会返回true。
plugins集合有一个名叫refresh()的方法,用于刷新plugins以反映最新安装的插件。这个方法接收一个参数:表示是否应该重新加载页面的一个布尔值。如果将这个值设置为true,则会重新加载包含插件的所有页面;否则,只更新plugins集合,不重新加载页面。
本文仅限内部技术人员学习交流,不得作于其他商业用途.文章出自:南昌网站建设公司-百恒网络 http://www.jxbh.cn 如转载请注明出处!