如何在新版谷歌Chrome上加载IE的Activex/OCX控件?

桃李春风一壶酒 2025-04-14 16:42:18

ActiveX控件是微软开发的一系列策略性面向对象程序技术和工具,IE流行的互联网早期,大量的ActiveX控件被应用于各种场景,学校,银行,企业官网等,随着浏览器安全升级,最新版浏览器已经都不支持Activex/OCX控件,但是大量企业面临历史业务无法升级,只能用IE浏览器继续苟延残喘,如何在新版谷歌Chrome上加载IE的Activex/OCX控件成为一个难题。

针对这些需求,猿大师团队2019年就开始布局,陆续发布了,猿大师播放器(网页加载VLC播放器/FFPLAY播放器来播放RTSP视频流)、猿大师办公助手(网页加载微软OFFICE/金山WPS/永中OFFICE实现在线编辑WORD/EXCEL/PPT文档)、猿大师CAD助手(网页加载AutoCAD、Solidworks、Catia等在线预览编辑CAD图纸)三个成熟且商业化软件,获得了包含交通、水利、教育、消防等政府单位及大中小型企业的广泛使用。

2025年猿大师又发布了OCX网页内嵌程序和EXE网页内嵌程序,可以在最新Chrome等主流浏览器中直接内嵌本机OCX控件或者桌面应用EXE程序,使网页内嵌OCX控件和桌面应用不再是难题。

第一步:注册OCX控件

1、把你要注册的OCX控件放在系统目录下。

32位系统将其复制到 C:windowssystem32 目录下。

64位系统将其复制到 C:WindowsSysWOW64 目录下。

2、以管理员身份运行cmd ==>> 输入命令:regsvr32 "ocx文件的完整路径" ==>> OCX注册成功

第二步:打开测试页面测试

比如:新版Chrome调用Adobe pdf reader的OCX控件打开PDF文档,如下图:

新版Chrome调用福昕OFD版式办公套件的OCX控件打开PDF文档,如下图:

新版Chrome调用VLC播放器播放RTSP视频流,如下图:

只需要指定OCX控件的ClassID或ProgID,包括不限于IE中使用的ActiveX控件,只要有持续交互的窗口,都可以使用,这样可以直接原来在IE下使用的ActiveX控件直接用猿大师中间件通用OCX程序直接嵌入新版Chrome等主流浏览器,而不需要桌面程序和ActiveX控件源代码,也不需要提供SDK来定制开发。

以下是未单独封装OCX控件接口功能的通用请求方法

11)、请求获取属性值

Name 指定属性名称 如遇到取子接口的,名称增加子接口的名称,支持多级,比如获取VLC播放列表的数量名称用playlist.itemCount 下同

{"req":"OCX_GetProperty","rid":11,"para":{"Name":"src"}}

{"req":"OCX_GetProperty","rid":11,"para":{"Name":"volume"}}

{"req":"OCX_GetProperty","rid":11,"para":{"Name":"Toolbar"}}

{"req":"OCX_GetProperty","rid":11,"para":{"Name":"playlist.itemCount"}}

{"req":"OCX_GetProperty","rid":11,"para":{"Name":"input.rate"}}

{"req":"OCX_PutProperty","rid":11,"para":{"Name":"video.logo.opacity"}}

返回: {"ret":0,"rid":11,"data":{"Ret":0,"Val":""}}

如果返回的是自动化接口,Val的值类似这样的:playlist={CatchDispatch},需要继续调用这个自动化接口的属性或方法时,接下来的请求里指定参数{CatchDispatch},否则默认调用控件主接口的,下同

12)、请求设置属性

Name 指定属性名称 如遇到设置子接口的,名称增加子接口的名称,支持多级

Val 指定属性值,字符串用""包含,字符串中包含\或"等字符时,需要加转义符\,数值型不用"",BOOL类型设置真时数值是-1

当需要释放缓存的自动化接口时,Name可以指定为类似这样的playlist={CatchDispatch},Val设置为0或空

{"req":"OCX_PutProperty","rid":12,"para":{"Name":"src","Val":"d:/zorro/test.pdf"}}

{"req":"OCX_PutProperty","rid":12,"para":{"Name":"Toolbar","Val":-1}}

{"req":"OCX_PutProperty","rid":12,"para":{"Name":"Visible","Val":-1}}

{"req":"OCX_PutProperty","rid":12,"para":{"Name":"volume","Val":0}}

{"req":"OCX_PutProperty","rid":12,"para":{"Name":"input.rate","Val":2}}

{"req":"OCX_PutProperty","rid":12,"para":{"Name":"video.logo.opacity","Val":50}}

{"req":"OCX_PutProperty","rid":12,"para":{"Name":"playlist={CatchDispatch}","Val"0}}

返回: {"ret":0,"rid":12,"data":{"Ret":0}}

13)、请求无传入参数方法

Name 指定方法名称 如遇到调用子接口的,名称增加子接口的名称,支持多级,比如调用VLC播放列表播放方法名称用playlist.play 下同

DID 也可以指定方法序号

{"req":"OCX_Invoke0","rid":13,"para":{"Name":"gotoFirstPage"}}

{"req":"OCX_Invoke0","rid":13,"para":{"Name":"gotoNextPage"}}

{"req":"OCX_Invoke0","rid":13,"para":{"Name":" playlist.play"}}

返回: {"ret":0,"rid":13,"data":{"Ret":0,"Val":""}}

0 阅读:0