如何判断IE OCX插件安装正常?

2020-07-10 16:21:33 浏览数 (1)

项目中用到了一个第三方的ie ocx控件,而经常遇到客户和测试小伙伴反馈相关功能无法正常使用,也没有友好提示。其实很多时候是插件未正常安装,或者是自定义安全级别设置有误。考虑到这个问题,必须要有一个ie ocx控件的检查机制。

检查原理

创建ActiveXObject对象去检查ocx控件,如果创建成功,则代表插件安装正确,否则安装有误。

代码语言:javascript复制
let newObj = new ActiveXObject(servername, typename[, location]) 

参数问题

看起来很简单的,但是用起来我懵逼了,应用程序对象名称servername这个参数怎么填呢?

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

代码语言:javascript复制
<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_ROOTSDS_CMSCtrl.SDS_CMSCtrlCtrl.1

ocx插件在注册表的位置

于是我猜想,servername应该就是SDS_CMSCtrl.SDS_CMSCtrlCtrl.1。经测试,果不其然。检查代码如下:

代码语言:javascript复制
try {
  const ocx = new ActiveXObject('SDS_CMSCtrl.SDS_CMSCtrlCtrl.1')
  console.log(ocx)
} catch (error) {
  this.$alert('您还未安装视频插件!', '提示')
}

这样一来,如果用户没有安装插件,马上能够得到提示,perfect!

ocx未安装的友好提示

0 人点赞