让Chrome/Firefox轻松兼容老旧的ActiveX,让访问硬件外设变得更友好

因为不常来,所以无法及时回复,看到很多人需要交流,请加QQ群:1041052470【JS调用ActiveX解决方案】

同学公司的医院系统是B/S架构的,之前为了兼容各种二代证读卡器(神思、握奇、精纶等)、IC卡读卡器(明华等)、还有各地神奇的健康卡,还有一个奇葩的ActiveX打印控件Lodop,还要支持汉王手写板签名,还要兼容客户的Windows XP,还要照顾前端的js框架......,为了兼容这一切的一切,不得不禁锢在IE8,然而,依然是各种的不兼容,不稳定,不方便......

本着让世界变得更美好的高尚信念,我帮他们设计了一套解决方案,并帮他们开发了出来,运行多时,还算稳定。

下面,就把系统实现原理和思路简单聊聊:

首先是,解决ActiveX兼容的问题。因为Chrome/Firefox不再支持XPCOM架构,所以写一个浏览器插件来解决这个问题并不是一个可行思路。所以,我用Delphi写一个单独的容器进程调用IE内核来运行各种ActiveX,然后开http接口来和Chrome/Firefox交互,我们暂时给这个容器进程起名叫WebAdapter,里面分别定义二代证、IC卡、健康卡等各种接口,每种接口把硬件类型传递过去。Chrome/Firefox端可以通过JSONP/XMLHttpRequest/WebSocket三种方式来通讯了。

XMLHttpRequest接口通讯是这个样子的:

然后,WebAdapter根据接口名getIdCardInfo调用相应的js文件进行后续处理:

getIdCardInfo.js中有同名函数,调用,然后进行根据硬件类型的type参数,再调用getIdCardObj()和getIdCardData()进行硬件的访问和数据的包装,看代码:

用js调用ActiveX:

 并把不同硬件厂商的数据包装成统一的格式返回:

返回的数据:

嗯,大概就是这个意思了,文字不够,代码来凑。

配合一个定制的Chrome内核的浏览器,功能更强。

时间不够了,今天先到这里吧,哈哈

 

 

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值