檢測瀏覽器是否安裝了特定的插件,對于非IE瀏覽器,可以使用plugins數組(navigator的屬性)
plugins數組的每一項均包含有以下屬性:
name:插件的描述
description:插件的描述
filename:插件的文件名
length:插件所處的MIME類型數量
PS:MIME:Multiple Internet Mail Extensions 多用途互聯網郵件擴展類型

在IE中檢測插件的唯一方式就是使用專用的ActiveXObject類型,并嘗試創建一個特定插件的實例。IE是以COM對象使用唯一標識。因此,要想檢查特定的插件,就必須知道其COM標識符。例如:Flash的標識符是ShockwaveFlash.ShockwaveFlash。知道唯一標識符之后,就可以編寫函數檢測IE中是否安裝相應的插件了。
IE只能是逐個new ActiveXObject(name);既定的插件名,然后通過是否實例成功側面檢測指定的插件是否已安裝。

原本是想通過檢測瀏覽器類型去決定使用哪種方式去檢測,但是由于IE瀏覽器中并非是簡單的時候插件的名字,因此最好的方式還是針對每個插件分別創建檢測函數。很遺憾,未找到一個更好的方式。
~~~
//IE中無效
function hasPlugin(name){
name = name.toLowerCase();
for(var i = 0; i < navigator.plugins.length; i++){
if(navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){
return true;
}
}
return false;
}
//IE瀏覽器
function hasIEPlugin(name){
try{
new ActiveXObject(name);
return true;
}catch (ex){
return false;
}
}
//檢測瀏覽器是否有Flash插件
function hasFlash(name){
var result = hasPlugin(name);
if(!result){
result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
}
return result;
}
~~~
當你的代碼運行需要基于某插件才能看到效果時,檢測瀏覽器中是否安裝了此插件,并給出相應的提示信息,請看下面代碼:
~~~
if(!hasFlash("flash")){
if(window.confirm("系統檢測到您的電腦尚未安裝該頁面必須的Flash插件,
需要您關閉瀏覽器后下載并按照提示安裝該插件。\r\n您確定繼續下載安裝Flash插件嗎?")){
var newWindow = window.open("http://wwww.baidu.com", "_blank", "");
if(newWindow == null){
//打開新窗口失敗
window.location = "http://wwww.baidu.com"; //在本窗口打開
}
}
}
~~~
簡單介紹一下window.open()函數
window.open(URL,name,features,replace)
URL參數要打開的url,如果省略該參數,或者傳一個空字符串,那么窗口中不會顯示任何內容。(可選)
Name參數是新窗口的名稱,該名稱可以用作`<a>`和`<form>`的屬性的target值,如果該參數指定一個依舊存在的窗口,那么open()方法就不會再創建一個新窗口,而只是返回對指定窗口的引用,在這種情況下,features將被忽略。(可選)
features參數聲明新窗口要顯示的標準瀏覽器的特征,如果省略改參數,新窗口具有所有標準特征。(可選)
replace參數,是一個布爾值,規定裝載到窗口的URL是在窗口的瀏覽歷史中創建一個新條目,還是替換瀏覽歷史中的當前條目
true:替換瀏覽歷史中的當前條目,
false在瀏覽歷史中創建新的條目。
對于最后一個參數replace,很遺憾,在火狐中試了好幾次,并沒有見到想見的效果,每次都是在瀏覽器歷史中創建了新的條目。
**name參數**
_blank:在新窗口中打開url。
_self:在當前窗口中打開URL,覆蓋當前文檔。
_top:在所有框架之外的最頂層窗口中打開URL。假如當前窗口無框架結構,此參數值等同于_self。
_parent:在當前框架的父框架內打開。假如當前框架無父框架,此參數值等同于_self。
_search:IE5.0在瀏覽器左邊的搜索面板內打開URL。
**features參數**

最后再說明一下window.location和window.location.href。
本質上來說window.location是一個對象(包括href ,host, hostname等屬性),而window.location.href是一個屬性。
但是在對window.location進行賦值操作時,就是賦值給了window.location.href。
因此使用`window.location = "http://www.qq.com";`或者是`"window.location.href = "http://www.qq.com"`效果是一樣的
對于檢測瀏覽器插件,如您有更好的方式,請給我留言,謝謝。
- 前言
- jQuery輪播圖插件
- JS模擬事件操作
- JS閉包與變量
- JS綁定事件
- HTML5之file控件
- JavaScript的this詞法
- JavaScript的this詞法(二)
- JS this詞法(三)
- JS檢測瀏覽器插件
- JS拖拽組件開發
- number輸入框
- Modernizr.js和yepnode.js
- DOM變化后事件綁定失效
- div和img之間的縫隙問題
- 詳解JavaScript作用域
- bootstrap入門
- 表單驗證(登錄/注冊)
- Bootstrap網格系統
- Bootstrap排版
- Bootstrap創建表單(一)
- Bootstrap表單(二)
- Bootstrap按鈕
- Bootstrap圖片
- Bootstrap字體圖標(glyphicons)
- Bootstrap的aria-label和aria-labelledby
- Bootstrap下拉菜單
- Bootstrap按鈕組
- Bootstrap按鈕菜單
- Bootstrap輸入框組
- Bootstrap導航元素
- Bootstrap導航欄
- sublimeText頻頻崩潰
- JQuery不同版本的差異(checkbox)
- Bootstrap面包屑導航、分頁、標簽、徽章
- Bootstrap警告
- Bootstrap進度條
- 前端的上傳下載
- JS字符串的相關方法
- CSS3選擇器(全)
- CSS3新增文本屬性詳述
- 利用CSS3實現圖片切換特效
- CSS3新增顏色屬性
- CSS3的border-radius屬性詳解
- JS創建對象幾種不同方法詳解
- JS實現繼承的幾種方式詳述(推薦)
- CSS3響應式布局
- JS模塊化開發(requireJS)
- 利用@font-face實現個性化字體
- 前端在html頁面之間傳遞參數的方法
- CSS自動換行、強制不換行、強制斷行、超出顯示省略號
- 如何在Html中引入外部頁面
- reactJS入門
- React組件生命周期
- 使用React實現類似快遞單號查詢效果
- ReactJS組件生命周期詳述
- React 屬性和狀態詳解