javascript檢測ActiveX插件是否安裝/啟用


本文主要提供在IE瀏覽器下檢測ActiveX插件安裝/啟用的狀態。

在一些應用開發中,需要用到一些第三方提供的ActiveX插件,如Flash插件。

為了在未安裝插件的瀏覽器顯示友好的提示,需要用到主動檢測插件的安裝/啟用狀態。

ActiveX插件本質上是一種COM組件,安裝了之后會在注冊表HKEY_CLASSES_ROOT\CLSID目錄下創建一個名稱為控件的CLSID的項,展開這個項,下面還有一個名稱為ProgID的項,它有一個默認值代表控件的名稱。如XML HTTP 6.0的CLSID為:HKEY_CLASSES_ROOT\CLSID\{88d96a0a-f192-11d4-a65f-0040963251e5},progID為:Msxml2.XMLHTTP.6.0。

也可以用ActiveXHelper更加方便的查看CLSID和ProgID:http://www.nirsoft.net/utils/axhelper.html

在一般情況下,可以通過以下代碼檢測插件是否安裝/啟用:

function createActiveX(progId) {
  try {
    return new ActiveXObject(progId);
  } catch(ex) {
    return null;
  }
}

function activeXEnabled(progId) {
  var obj = createActiveX(progId);
  return !!obj;
}

var xmlhttp6Enabled = activeXEnabled("Msxml2.XMLHTTP.6.0"),
  flashEnabled = activeXEnabled("ShockwaveFlash.ShockwaveFlash");

由於IE9引入了ActiveX篩選功能,同樣也要考慮到非IE瀏覽器訪問情況,所以還要增加一下判斷,把方法調整如下:

function activeXFeature() {
  if (!window.ActiveXObject) return false;
  try {
    if (window.external && external.msActiveXFilteringEnabled && external.msActiveXFilteringEnabled())
      return false;
  }
  catch(ex) {}
  return true;
}

function createActiveX(progId) {
  if(!activeXFeature()) return null;
  try {
    return new ActiveXObject(progId);
  } catch(ex) {
    return null;
  }
}

還有一些特殊情況,插件可能沒有progID,這個時候就沒有辦法使用上面的方法進行檢測了,這時候就需要直接創建object標簽。

一般情況下,第三方插件也是直接通過object標簽直接呈現在頁面上的,如下:

<object classid="clsid:88d96a0a-f192-11d4-a65f-0040963251e5" codebase="xx.cab#version=1.1"></object>

其中,codebase為瀏覽器能夠直接識別的安裝包。

很多情況下可能不需要在頁面加載時就呈現這個標簽內容,而且,指定了codebase情況下還要等cab文件下載完才能把網頁呈現出來,非常影響用戶體驗,所以改造為以下方法來進行檢測:

function activeXEnabled(clsid) {  
  var el = document.createElement("div"), result = false, axid = "lwme_ax_" + (+new Date()), axobj;
  document.body.append(el);
  el.innerHTML = '<object id="' + axid + '" classid="clsid:' + clsid + '"></object>';
  axobj = document.getElementById(axid);
  result = axobj && axobj.object;
  document.body.removeChild(el);
  axobj = null;
  el = null;
  return result;
}

這樣就可以在必要的時候在頁面上創建object標記來檢測ActiveX插件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM