项目中用到了一个第三方的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目录下,但是这也太多了吧,怎么找得到?

当然还是要靠搜索功能,于是我根据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博客,即刻阅读最新文章!

最新文章

  1. iOS json 解析遇到error: Error Domain=NSCocoaErrorDomain Code=3840 &quot;The operation couldn’t be completed.
  2. 【转】Oracle 执行计划(Explain Plan) 说明
  3. 关于腾讯云ubuntu服务器tomcat访问慢问题
  4. 创业小坑:内网域名 在windows下能nslookup,但ping不通,也无法访问。而在linux下正常。
  5. [No000019]不想背单词?看看游戏能否帮你
  6. 未签名有元程序集 Unsigned Friend Assemblies
  7. ROCK 聚类算法‏
  8. BeagleBone Black Linux驱动程序开发入门(0): 开发环境
  9. OpenCV在矩阵上的卷积
  10. WaitForSingleObject函数
  11. Calendar 时间日历简单例子
  12. Mahout文本向量化
  13. Jackson Annotation Examples
  14. OJ#1002 又是a+b
  15. JS高级前端开发群加群说明
  16. 细说 Django — web 前后端分离
  17. UVA 12338 Anti-Rhyme Pairs(hash + 二分)题解
  18. iOS开发- 隐藏键盘总结
  19. 【DUBBO】dubbo的registry配置
  20. GOF23设计模式之装饰模式(decorator)

热门文章

  1. 一个null,差点把系统给弄崩溃了
  2. Linux运维的第一周总结
  3. 在 Xcode9 中自定义文件头部注释和其他文本宏
  4. java 反射借助 asm 获取参数名称最优雅简单的方式
  5. Cannot forward after response has been committed问题的解决
  6. CodeForces1000A- Codehorses T-shirts
  7. HDU1561 The more ,The better (树形背包Dp)
  8. Android Studio 3.0下创建menu布局文件的图例
  9. Python爬虫技术:爬虫时如何知道是否代理ip伪装成功?
  10. unity3d 柏林噪声 PerlinNoise 规律 算法