项目中用到了一个第三方的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博客
,即刻阅读最新文章!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。