項目中用到了一個第三方的ie ocx控件,而經常遇到客戶和測試小夥伴回報相關功能無法正常使用,也沒有友好提示。考慮到這個問題,必須要有一個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注冊到系統注冊資料庫的任務表中,以使客戶能夠定位并裝載與該對象有關的可執行代碼。
以上摘自百度百科,可以看到
clsid
跟
uuid
是類似的原理,用來進行插件的唯一辨別。
根據clsid怎麼查到servername
在
MDN
上搜尋
ActiveXObject
詞條,可以看到這麼一句:
您可以在注冊系統資料庫項中識别主機PC上的
HKEY_CLASSES_ROOT
值。
servername.typename的
哦,可以看到是從系統資料庫中去查的。于是我運作
regedit
打開系統資料庫檢視,雖然知道是在
HKEY_CLASSES_ROOT
目錄下,但是這也太多了吧,怎麼找得到?
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLU90TS91UFN1UBx0QflVRLhEOBVSMBVCOFVyQ4UiN4USNFVCOBVyMCViNFVyLc52YucmbhlmaidnLuR2YuF3Lc9CX6MHc0RHaiojIsJye.png)
當然還是要靠搜尋功能,于是我根據
clsid
的值
27E1A157-6A29-48AE-86C2-14591D90B4D4
進行查找
搜尋時間有點長,但是最終還是查到了,位置如下:
計算機\HKEY_CLASSES_ROOT\SDS_CMSCtrl.SDS_CMSCtrlCtrl.1
于是我猜想,
servername
應該就是
SDS_CMSCtrl.SDS_CMSCtrlCtrl.1
。經測試,果不其然。檢查代碼如下:
try {
const ocx = new ActiveXObject('SDS_CMSCtrl.SDS_CMSCtrlCtrl.1')
console.log(ocx)
} catch (error) {
this.$alert('您還未安裝視訊插件!', '提示')
}
這樣一來,如果使用者沒有安裝插件,馬上能夠得到提示,perfect!
首發連結
掃一掃下方小程式碼或搜尋
Tusi部落格
,即刻閱讀最新文章!