如何判斷IE OCX插件正常安裝?


項目中用到了一個第三方的ie ocx控件,而經常遇到客戶和測試小伙伴反饋相關功能無法正常使用,也沒有友好提示。考慮到這個問題,必須要有一個ie ocx控件的檢查機制。

檢查原理

創建ActiveXObject對象去檢查ocx控件

let newObj = new ActiveXObject(servername, typename[, location]) 

參數問題

看起來很簡單的,但是用起來我懵逼了,應用程序對象名稱servername這個參數怎么填呢?

插件供應商只提供了控件安裝包,示例程序,clsid

<object id="NetVideo" classid="clsid:27E1A157-6A29-48AE-86C2-14591D90B4D4"></object>

於是我想應該可以從clsid入手研究。

什么是clsid

class identifier(類標識符)也稱為CLASSID或CLSID,是與某一個類對象相聯系的唯一標記(UUID)。一個准備創建多個對象的類對象應將其CLSID注冊到系統注冊數據庫的任務表中,以使客戶能夠定位並裝載與該對象有關的可執行代碼。

以上摘自百度百科,可以看到clsiduuid是類似的原理,用來進行插件的唯一標識。

根據clsid怎么查到servername

MDN上搜索ActiveXObject詞條,可以看到這么一句:

您可以在HKEY_CLASSES_ROOT注冊注冊表項中識別主機PC上的servername.typename的值。

哦,可以看到是從注冊表中去查的。於是我運行regedit打開注冊表查看,雖然知道是在HKEY_CLASSES_ROOT目錄下,但是這也太多了吧,怎么找得到?

注冊表HKEY_CLASSES_ROOT

當然還是要靠搜索功能,於是我根據clsid的值27E1A157-6A29-48AE-86C2-14591D90B4D4進行查找

搜索clsid

搜索時間有點長,但是最終還是查到了,位置如下:

計算機\HKEY_CLASSES_ROOT\SDS_CMSCtrl.SDS_CMSCtrlCtrl.1

ocx插件在注冊表的位置

於是我猜想,servername應該就是SDS_CMSCtrl.SDS_CMSCtrlCtrl.1。經測試,果不其然。檢查代碼如下:

try {
  const ocx = new ActiveXObject('SDS_CMSCtrl.SDS_CMSCtrlCtrl.1')
  console.log(ocx)
} catch (error) {
  this.$alert('您還未安裝視頻插件!', '提示')
}

這樣一來,如果用戶沒有安裝插件,馬上能夠得到提示,perfect!

ocx未安裝的友好提示


首發鏈接


掃一掃下方小程序碼或搜索Tusi博客,即刻閱讀最新文章!

Tusi博客


免責聲明!

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