項目中用到了一個第三方的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
詞條,可以看到這么一句:
您可以在
HKEY_CLASSES_ROOT
注冊注冊表項中識別主機PC上的servername.typename的
值。
哦,可以看到是從注冊表中去查的。於是我運行regedit
打開注冊表查看,雖然知道是在HKEY_CLASSES_ROOT
目錄下,但是這也太多了吧,怎么找得到?
當然還是要靠搜索功能,於是我根據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博客
,即刻閱讀最新文章!