谷歌浏览器Chrome调用OCX方法调查
概念解释
- OLE(Object Linking and Embedding):对象链接和嵌入,为了支持混合文档(包含多种资料类型,比如文本、绘画图像、声音、动画)。Windows桌面就是一个混合文档的范例,微软使用OLE来建立的。最早扩展名为.vbx,后来变为.ocx。
- OCX(OLE Control Extension):作为OLE的一种补充,文件扩展名为.ocx。OCX可以使用VB、VC、Delphi等工具编写。
- ActiveX:OLE和OCX后来演化为ActiveX,增加WWW上的功能。主要用在网页上嵌入小程序增加交互功能。
OCX的使用
- 注册OCX控件,在运行界面执行 regsvr32 D:\DealAPI_ActiveX.ocx
- 注销OCX控件,在运行界面执行 regsvr32 /u D:\DealAPI_ActiveX.ocx
- 运行界面执行regedit,搜索DealAPI_ActiveX,可以获取classid
测试页面进行调用
<object id="DealAPI_ActiveXCtl" classid="CLSID:8C44BC14-C04D-4664-B455-7CFA9FCCECB2" width="0" height="0"></object> <script> try { var rcc = document.getElementById("DealAPI_ActiveXCtl"); rcc.ICConnect(0,0,2,0,"LIKE"); } catch (e) { alert(e); } </script>
这是一个最简单的页面调用刷卡器的功能,可以在IE浏览器上执行,但在Chrome中会报TypeError: rcc.ICConnect is not a function错误。原因是Chrome浏览器不支持微软的ocx组件调用。
常用解决方法
- 通过NPAPI调用OCX,网上有很多开源的工具如np-activex。但考虑到NPAPI存在安全隐患,Chrome 45版本后就不支持NPAPI了。
- 加载IE内核来访问页面,常用插件有IE Tab(收费)、Open in IE等。
- 通过启动本地程序和浏览器插件进行交互,从而让浏览器能调用到OCX,如AppEmit(收费)
第一种方法需要将Chome回退到版本45,第二种方法每次访问前都要先启动插件,第三种方法则需要收费以及二次开发。如果不考虑安全性和方便性,第二种方法实现简单成本较低。