概述
5月16日,微软Edge浏览器通过其官方微博宣布,微软在1995年推出的IE浏览器,将于6月16日正式退役,之后其功能将由Edge浏览器接棒。
得知IE浏览器正式退役,不由得想起来几年前从事数字证书行业的时光。当时使用了ActiveX控件和USBKey通信,业务系统的网页端调用ActiveX控件接口实现业务逻辑。遇到了各种奇怪的问题,有时候IE浏览器就是加载不到控件,只能建议用户换一台电脑。
随着chrome浏览器的发展,chrome浏览器默认不加载flash了,发展到最后chrome彻底移除了flash。于是就面临了一个很严重的问题,如何支持chrome?
最终找到的解决方案是增加了一个本地程序,在本地程序中运行一个websocket服务器,并且由本地程序调用ActiveX控件并将结果通过websocket传给业务系统即业务系统 js <–> 本地server <–> activex 。流程如下图:
开发测试环境
- windows 10
- vs2010
- ie11 Edge101
- websocket服务器为websocketpp
- websocketpp依赖boost库
源码
- ATLProject1 ActiveX控件的源码
- ATLProjectService 本地Server
- htmljs 模拟业务系统
效果
ActiveX控件提供的接口如下图所示
STDMETHODIMP CCalc::Calc(SHORT a, SHORT b, SHORT * result)
{
// TODO: 在此添加实现代码
*result = a + b;
Fire_OnDigit(0,2);
return S_OK;
}
js测试界面如下图所示
IE打开html
-
允许ActiveX运行
-
再次提示,允许运行
-
算出结果
Edge打开html
-
首先启动本地WebSocket服务器
-
打开网页
-
算出结果