在使用JS時(shí),我們?yōu)榱吮WC瀏覽器的兼容及通用性,我們需要對(duì)瀏覽器是否支持相應(yīng)插件進(jìn)行檢測(cè),接下來(lái)由南昌網(wǎng)站設(shè)計(jì)公司技術(shù)人員向大家介紹瀏覽器插件檢測(cè)方法及注意事項(xiàng).
檢測(cè)瀏覽器中是否安裝了特定的插件是一種最常見(jiàn)的檢測(cè)例程。對(duì)于非IE瀏覽器,可以使用plugins數(shù)組來(lái)達(dá)到這個(gè)目的。該數(shù)組中的每一項(xiàng)都包含下列屬性:
□name:插件的名字;
□description:插件的描述;
□filename:插件的文件名;
□length:插件所處理的MIME類型數(shù)量。
一般來(lái)說(shuō),name屬性中會(huì)包含檢測(cè)插件必需的所有信息,但有時(shí)候也不完全如此。在檢測(cè)插件時(shí),需要像下面這樣循環(huán)迭代每個(gè)插件并將插件的name與給定的名字進(jìn)行比較:
//檢測(cè)插件(在IE中無(wú)效)
function hasPlugin( name){
name=name.toLowerCase();
for (var i=0; i if (navigator. plugins[i].name. toLowerCase().indexOf (name)>-1)(
return true;
}
}
return false;
}
//檢測(cè)Flash
alert (hasPlugin("Flash"));
//檢測(cè) QuickTime
alert (hasPlugin("QuickTime"));
//檢測(cè)Java
alert (hasPlugin( "Java"));
這個(gè)hasPlugin()函數(shù)接受一個(gè)參數(shù):要檢測(cè)的插件名。第一步是將傳人的名稱轉(zhuǎn)換為小寫(xiě)形式,以便于比較。然后,迭代plugins數(shù)組,通過(guò)indexOf()檢測(cè)每個(gè)name屬性,以確定傳人的名稱是否出現(xiàn)在字符串的某個(gè)地方。比較的字符串都使用小寫(xiě)形式可以避免因大小寫(xiě)不一致導(dǎo)致的錯(cuò)誤。而傳人的參數(shù)應(yīng)該盡可能具體,以避免混淆。應(yīng)該說(shuō),像Flash和QuickTime這樣的字符串就比較具體了,不容易導(dǎo)致混淆。在Firefox、Safari、Opera和Chrome中可以使用這種方法來(lái)檢測(cè)插件。
檢測(cè)IE中的插件比較麻煩,因?yàn)镮E不支持Netscape式的插件。在IE中檢測(cè)插件的唯一方式就是使用專有的ActiveXObject類型,并嘗試創(chuàng)建一個(gè)特定插件的實(shí)例。IE是以COM對(duì)象的方式實(shí)現(xiàn)插件的,而COM對(duì)象使用唯一標(biāo)識(shí)符來(lái)標(biāo)識(shí)。因此,要想檢查特定的插件,就必須知道其COM標(biāo)識(shí)符。例如,F(xiàn)lash的標(biāo)識(shí)符是ShockwaveFlash.ShockwaveFlash。知道唯一標(biāo)識(shí)符之后,就可以編寫(xiě)類似下面的函數(shù)來(lái)檢測(cè)IE中是否安裝相應(yīng)插件了:
//檢測(cè)IE中的插件
function hasIEPlugin (name){
try{
new ActiveXObj ect (name);
return true;
} catch(ex){
return false;
}
}
//檢測(cè)Flash
alert (hasIEPlugin("ShockwaveFlash. ShockwaveFlash"))
//檢測(cè) QuickTime
alert( hasIEPlugin("QuickTime. QuickTime“));
在這個(gè)例子中,函數(shù)hasIEPlugin()只接收一個(gè)COM標(biāo)識(shí)符作為參數(shù)。在函數(shù)內(nèi)部,首先會(huì)嘗試創(chuàng)建一個(gè)COM對(duì)象的實(shí)例。之所以要在try-catch語(yǔ)句中進(jìn)行實(shí)例化,南昌網(wǎng)絡(luò)公司技術(shù)員提示大家是因?yàn)閯?chuàng)建未知COM對(duì)象會(huì)導(dǎo)致拋出錯(cuò)誤。這樣,如果實(shí)例化成功,則函數(shù)返回true;否則,如果拋出了錯(cuò)誤,則執(zhí)行catch塊,結(jié)果就會(huì)返回false。例子最后檢測(cè)IE中是否安裝了Flash和QuickTime插件。
鑒于檢測(cè)這兩種插件的方法差別太大,因此典型的做法是針對(duì)每個(gè)插件分別創(chuàng)建檢測(cè)函數(shù),而不是使用前面介紹的通用檢測(cè)方法。來(lái)看下面的例子:
//檢測(cè)所有瀏覽器中的Flash
function hasFlash()(
var result=hasPlugin("Flash");
if(!result){
result=hasIEPlugin("ShockwaveFlash. ShockwaveFlash");
}
return result;
}
//檢測(cè)所有瀏覽器中的QuickTime
f unc tion hasQuickTime(){
var result=hasPlugin("QuickTime");
if(!result){
result=hasIEPlugin("QuickTime. QuickTime");
}
return result;
}
//檢測(cè)Flash
alert(hasFlash());
//檢測(cè) QuickTime
alert (hasQuickTime());
上面代碼中定義了兩個(gè)函數(shù):hasFlash()和hasQuickTime()。每個(gè)函數(shù)都是先嘗試使用不針對(duì)IE的插件檢測(cè)方法。如果返回了false(在IE中會(huì)這樣),那么再使用針對(duì)IE的插件檢測(cè)方法。如 果IE的插件檢測(cè)方法再返回false,則整個(gè)方法也將返回false。只要任何一次檢測(cè)返回true,整個(gè)方法都會(huì)返回true。
plugins集合有一個(gè)名叫refresh()的方法,用于刷新plugins以反映最新安裝的插件。這個(gè)方法接收一個(gè)參數(shù):表示是否應(yīng)該重新加載頁(yè)面的一個(gè)布爾值。如果將這個(gè)值設(shè)置為true,則會(huì)重新加載包含插件的所有頁(yè)面;否則,只更新plugins集合,不重新加載頁(yè)面。
本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://www.myforexfactory.net 如轉(zhuǎn)載請(qǐng)注明出處!