zoukankan      html  css  js  c++  java
  • 如何判断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注册到系统注册数据库的任务表中,以使客户能够定位并装载与该对象有关的可执行代码。

    以上摘自百度百科,可以看到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。经测试,果不其然。检查代码如下:

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

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

    ocx未安装的友好提示


    首发链接


    扫一扫下方小程序码或搜索Tusi博客,即刻阅读最新文章!

    Tusi博客

  • 相关阅读:
    单例模式简介
    WebSocket简介
    向数据库中插入非空字段并赋初值
    MD5加(解)密代码实现
    DES字符串加(解)密代码实现
    常见状态码
    13.Roman to Integer&#160;
    14.Longest Common Prefix
    20.Valid Parentheses
    26.Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/wenbinjiang/p/11685098.html
Copyright © 2011-2022 走看看