微软官宣IE将“退役”,老网站如何实现在Chrome、Firefox中兼容运行?
一、 问题
美国微软公司为了推广其Chromium内核的Edge浏览器,在2021年5月19日突然宣布,自2022年6月15日起,绝大多数版本的Windows 10系统将不再支持IE浏览器,因此IE即将彻底退出互联网的舞台。具体来说微软决定将不再支持Windows 10所有消费者版本中的IE运行,即使用户强制启动IE也会重定向到Edge浏览器来打开网页,类似这样:
服务器和长期服务渠道(LTSC)的Windows 10版本中虽说暂时不变,但谁也说不清哪天也会被取消支持了。相关详情可点击: The future of Internet Explorer on Windows 10 is in Microsoft Edge 和 Internet Explorer 11 desktop app retirement FAQ 查看。
IE诞生于1995年,是Windows系统默认的免费网页浏览器,微软利用系统捆绑的方式很快就击败了当时收费的竞争对手Netscape。在巅峰时期,IE占据了全球桌面浏览器市场90%以上的份额,直到2013年前后谷歌浏览器逐渐成为主流。在这近20年的时间里,虽然中途有Firefox浏览器最高时抢占了约30%市场份额,但是当时不管哪个网站的发布都得把兼容IE作为重头戏进行测试。而在互联网发展的历史进程中,浏览器的功能开始时还比较简单,为了弥补浏览器自身功能的不足和提高网页中的交互体验,浏览器开发商都提供了非常开放的插件开发接口给第三方调用,其中以IE中的ActiveX控件和非IE中的NPAPI插件最为典型。第三方公司基于浏览器的插件开发接口开发了各种各样的控件或插件,典型如金融行业网银系统的安全及读卡等控件、多媒体领域的Flash Player等网页播放器,工业设计领域的dwg/dxf等图纸查看控件,因此各大下载站点类别中还单独增加了浏览器插件软件。而美国谷歌公司的Chrome浏览器为了抢占IE的用户,基于IE开发接口发布了Chrome Frame插件可将IE网页改成Chromium内核渲染显示。为简化各浏览器的插件开发,国外还诞生了非常有名的跨浏览器的开源插件框架FireBreath,底层实现采用的是ActiveX控件和NPAPI插件技术,曾经流行的Java Applet和Unity网页游戏引擎底层实现同样如此,有几年时间基于这两个开发的网页游戏不仅多,还很火爆,全民半夜网络偷菜成为一景。而RIA(丰富型互联网应用程序)曾经也非常受企业欢迎,Adobe的Flex和微软的Silverlight作为RIA开发的两个典型代表由于门槛低、开发便捷等优势在企业信息化领域得到了广泛使用,其实现同样依赖ActiveX控件和NPAPI插件技术。
然而,这些浏览器的控件或插件是否安全、是否稳定好用,完全取决于其开发商,因此时常被别有用心的人或公司利用来散发病毒、植入木马或偷取敏感信息,导致联网操作越来越不安全,浏览器本身也经常因此失去响应或崩溃。IE浏览器不得已增加了多种所谓的安全设置来限制运行ActiveX控件,这又导致体验差、实施维护难,因为大多数电脑用户也不懂得如何修改设置来确保正常运行这些ActiveX控件。如下图所示:
而谷歌公司在2015年索性宣布在其后发布的Chrome浏览器直接取消NPAPI插件的运行支持,随后Firefox新版本浏览器也跟随Chrome不再支持NPAPI插件的运行,从此所有使用了NPAPI插件技术的老网站再也无法在Chrome、Firefox、Opera等高版本浏览器中运行,网站提供商大多数就只能退而求其次,需要时只能让用户启动IE访问。这不,时至今日即使是最有钱的金融行业各大银行,也没有解决其网银系统在Chrome、Firefox等高版本浏览器中的使用问题。当用户在这些浏览器中使用遇到兼容性问题时,也只能无奈的告诉用户,请使用IE浏览器,囧。然而现在微软平地一声雷,突然宣告IE即将寿终正寝,比如银行、工商、税务、教育等老网站大多属于公共服务及OA、ERP等企业信息化系统还不得不继续提供服务,这就面临再无浏览器可用的窘境,现在是迫切需要一个具有良好兼容性、稳定性的可行技术方案来彻底解决此问题的时候了。
二、 现有方案
结合当前各方面的信息,现有解决方案大体上有如下几类:
1. 以不变应万变方案,继续当鸵鸟,不升级操作系统和浏览器版本,避免无法使用的情况出现。虽然说这样也不是不可以,但会面临巨大的安全风险,因为使用的陈旧操作系统如Windows 7或低版本浏览器被发现和公开的漏洞越来越多且无法修复,随时可能被攻击或被利用导致业务系统停止运行和丢失敏感数据。况且此方案只适用于企业内部电脑数量少且固定的场景。对于类似网银这样为公众服务的网站或终端请求电脑数量多又经常变动的网站,用户的电脑操作系统和浏览器版本往往是不可控的,只能尽量主动去适配用户的电脑环境确保可用,否则每人一口唾沫也会把客服人员淹死。或许你会说让用户全部切换用手机APP或传统桌面客户端就行了,不再提供桌面网页版,暂且不说这种躲猫猫的懒政行为会对企业形象造成巨大伤害,企业网银的桌面网页版总不能也取消支持吧,因为在企业内网中使用桌面电脑的比例比较高,移动端由于屏幕大小所限或安全因素考虑,始终还是少数,而传统桌面客户端开发、部署、维护等又是个大麻烦。还有就是业务系统所用的电脑,时间长了可能坏掉或需要增加数量来使用,而这些新购电脑往往安装的是当前主流的操作系统,说不定哪天就无法降级安装老版系统来使用了。在2021年1月份就发生了一起因新购电脑自动安装了被Adobe公司突然停用的Flash Player软件版本导致大连车务段的现在车系统无法正常使用的事故,引起了广泛的舆论关注和网民的群嘲,幸运的是这些新购电脑还能安装旧版系统降级使用,但问题并未得到根本解决。
2. 采用浏览器扩展方案,比如Chrome、Edge等浏览器上的扩展程序商店中,可以下载安装国外开发商提供的IE Tab,但其商业用途是收费的。通过此扩展程序,可以在浏览器标签页中把某个网页整体用IE内核渲染显示,据统计这是在Chrome程序商店中付费用户最多的扩展,可见需求还挺强烈。不过由于国内的特殊网络环境,往往无法直接在线下载完成安装,对普通电脑用户来说这步就难倒了大多数人。况且商业用途的话,企业内网常常是和外网阻断的,实施部署非常麻烦,而且网页需要切换到IE内核渲染时还需要用户手工点击一下,体验还是差了一些,也无法满足国内自主可控的要求。其售价也不低,因为是国外开发商,沟通交流存在障碍不说,采购流程也是漫长又繁琐的。好处是不需要修改网站代码,可支持主流版本的浏览器使用。
3. 双内核浏览器方案,国产典型的如360、QQ等浏览器,需要用IE内核来渲染的网页,可在地址栏右侧手工点击切换内核的闪电图标来完成重新加载显示。此方案虽然是免费的,不过代价是终端电脑用户可能会时常收到广告弹窗,防不胜防又无可奈何。这些浏览器往往也非常臃肿,因为夹带了不少和开发商利益相关的私货功能,另外其内置的Chromium内核版本往往不是最新的,也存在潜在的安全漏洞风险。最大的问题是这些浏览器在整个桌面浏览器的市场份额占比低,无法确保70%左右市场份额的Chrome浏览器可以正常使用。此方案好处也是不需要修改网站代码,成本低。
4. 微软官方建议的方案,就是Edge的IE模式。笔者作为这方面的专业人士,在Edge最新的大众90版本上根据网上的相关教程也没实践出如何让某个网站用IE模式来渲染显示,诸位看官可出手试试,^_^。其复杂的设置如下图所示:
这个Chromium内核的Edge浏览器,在微软重金推广之下,目前市场占有率也还仅仅是个位数,或许正如微软自家网页翻译服务自动译为“边缘”浏览器的意思一直这样了,想要作为主要技术方案来实施还是太勉为其难,而且Edge只能模拟IE 11,在64位系统上Edge的IE模式能否加载32位的ActiveX控件也是未知数,感觉就是不想让你用起来IE模式,微软为了让客户改用Edge也是无所不用其极啊。
5. 彻底改造方案,就是将无法在Chrome等浏览器中兼容运行的程序模块,比如ActiveX控件实现的功能改用比如HTML5、WebGL、WebAssembly等新技术重写。然而理想是好的,现实确是非常无奈的,由于Chrome等浏览器越来越收紧其开发接口,太多想要实现的功能很难做到。即使能实现,很可能功能实现不全,另外投入大、周期长,前端网页代码需要同步调整,运行性能也是很大的问题。就拿摄像头的RTSP实时视频流播放来说,IE中调用ActiveX控件来播放延迟在毫秒级,而在Chrome中只能采用转码方案播放延迟在秒级,相差数倍,往往无法满足安防行业的要求。此外还普遍存在ActiveX控件的调用方和ActiveX控件的开发方不是一家的情况,调用方想要实现替代ActiveX控件功能更是难上加难,而想要开发方公司提供替代组件往往也不可行,开发方失联或已经关门歇业也不是啥稀罕事。
三、 新方案
综合对比上述的各种方案,您会发现没有一个方案是可以令大家满意的。想要实现一个低成本、兼容性好、高性能、易于实施的自主可控解决方案,需要另辟蹊径。这个问题的根源还是因为Chromium等内核的浏览器不再支持DLL、ActiveX控件等原生程序的运行,新提供的PPAPI插件技术又因为太多限制迄今为止成功案例极少,很快会被取消支持。所以突破点就在于是否能在主流的Chrome、Firefox等浏览器之上实现一个通用的外接框架来支持这些原生程序的内嵌网页运行,并且可以自动响应浏览器的各种操作如窗口缩放、窗口移动、窗口关闭、网页滚动、标签页切换等。经过搜索发现有个成熟的半开源国产中间件软件( https:// codechina.csdn.net/zorr osoft/pluginok )正好实现了,兼容性还很强,宣称是一个跨浏览器的原生小程序系统,同时提供了前端可自动安装、升级小程序的可控机制,重点还引入了调用方权限验证机制,可确保这些小程序的运行安全。这一整套技术方案具有较强的创新性和实用性,开发商还申请了软件发现专利保护。看到已经有不少公司采用,有的还是上市公司,笔者下载软件后赶紧联系客服开通权限免费试用了下,真的很神奇,运行效果完全和以前NPAPI插件实现的一样。下面是其实现原理图:
通过简单的技术分析和其文档介绍得知,这个就是在浏览器之外再搭建了一个和操作系统交互的通道用于支持DLL、ActiveX控件等原生程序的运行,完全不依赖浏览器自身的开发接口,这样就很好规避了浏览器升级可能造成技术方案失效的风险。而在浏览器中通过HTML5标准中的Web Socket技术和这个pluginok中间件及启动的原生小程序通讯,实现双向的命令请求和反馈机制。此方案的难点是要让外接的程序能够很好的模拟运行在网页中,实现内嵌网页运行的真实体验,可喜的是我们看到pluginok实现的效果令人满意,不仅仅支持有交互界面的窗口程序可内嵌运行,也可以对各种硬件设备的驱动DLL进行调用。开发商还发布了VLC网页播放小程序、桌面微软Office及金山WPS在线编辑系列小程序等,可以把Word、Excel等程序窗口直接完整内嵌到Chrome网页中运行。可以看出这个中间件的问世不仅仅是为解决老网站兼容运行的问题,而且是基于浏览器搭建了一个类似微信小程序那样的小程序生态系统,用于扩展浏览器的功能,让浏览器成为各种信息化系统集成的最佳容器,可彻底解决B/S系统的各种痛点和难点,让传统的C/S桌面程序迁移到浏览器中运行再无障碍。
具体到兼容老网站的方法,基于这个pluginok中间件提供了两种方案:第一种就是pluginok中间件搭配其官方发布的IE控件小程序,可以在Chrome等浏览器网页中通过脚本请求实现局部加载IE内核渲染的网页,成本低,前端改造小,部署可实现自主可控,这就比IE Tab扩展插件好太多了,当然缺点也是有的,这就是IE浏览器自身带来的了,加载运行时弹警告体验差、稳定性差、内存占用高,不想太折腾的老网站建议采用。第二种方案属于彻底改造方案,彻底抛弃IE内核,将原来的ActiveX控件或DLL等程序模块,基于pluginok中间件的二次开发接口封装为一个独立进程的小程序来运行。此方案前端改造大些,成本相对高,不过体验好,性能高,内存占用低,适合新开工项目采用。这两种方案都可以直接复用以前的DLL或ActiveX控件,无需其源码,这就大大节省了开发成本。第一种方案只需要修改网站前端代码,第二种同时还需要开发一个小程序,不过这个开发还是比较容易的,看介绍提供的是COM组件的友好接口,也可以委托开发,只是多一点成本,至少技术上是完全没问题的。
四、 总结
一个好的技术实施方案,首先是要满足客户的刚性需求,其次是尽量降低采购、开发、实施及维护的总成本,再次是要有良好的兼容性和稳定性,最后需尽量确保技术方案不能因为操作系统或浏览器的升级而失效。本文基于当前最新的技术信息和实践经验,给大家提供了基于pluginok中间件的两种新方案来解决老网站在Chrome等浏览器中的兼容使用问题,尤其适用于少改动以避免影响现有业务系统运行的场景,以供大家技术选型参考。