在Chrome上加载ActiveX控件:np-activex简介

2,059 views
Skip to first unread message

Qian Hong

unread,
Nov 16, 2011, 9:21:12 AM11/16/11
to non-ie-online-banking
* np-activex [1] 是eagleonhill开发的开源项目。目前np-activex由一个plugin
npactivex.dll 和其他文件一起包装成Chrome的 *.crx 插件。其中npacitvex.dll
是一个标准的npapi插件,只要修改包装的部分,理论上可以让np-activex也支持firefox。

* np-activex是一个代理,对于chrome浏览器来说,它是一个npapi
plugin,而对于ActiveX控件来说,它是一个ActiveX host.
这就是Chrome能通过np-activex使用ActiveX控件的基本原理。
在Windows上,ActiveX控件,np-activex和chrome的npapi plugin host三者是在同一个进程空间中的。

* 在HTML中嵌入ActiveX控件和嵌入npapi插件的语法是不同的,对此np-activex通过inject_actions.js中的相关函数对网页进行动态替换,使每个调用ActiveX的地方都替换成调用npapi的形式,才能通过npactivex.dll间接调用ActiveX控件。

* 国内网银页面除了ActiveX以外,还用了许多非标准的javascript(和css),这些情况让网银跨平台的问题变得加倍复杂。np-activex同样做了各种workaround,但是仍然没办法顾全所有的网银。这里转载一段eagleonhill的描述:
“网银他们网站在做代码的时候都认为只有IE才有可能使用那些控件的,因此很多都是只考虑了IE的语法。让他们改成标准的形式也是可以的。但在许多ActiveX控件内部的实现里,由于可以通过某种方式访问页面的DOM,但是那些访问方法的DOM形式还是完全按照IE的方式,如执行attachEvent,我目前内部实现时只是完全按名重新在Chrome里调用,因为如果DOM元素里没有这些操作将失败。不过这种情况比较少见。
还有如控件里先调用release某页面元素,再执行操作,在IE里没有问题,因为系统里至少留了一个引用,所以对象不会被销除,但由于在我的控件只是一个wrapper,一调release就删除了,然后就会调用失败。这个在某银行的控件(忘了,好像是交通银行)的提交表单时出现。所以,如果要兼容,还要确保所有release的调用正确。
当然,还有一个是Display为none时,控件完全不加载的问题。IE在display为none时仍能加载控件,因此很多网站把那些后台控件,如用于提交的控件的display设为none,或者在切换页面暂时隐藏时设为none,但这会导致无法正确调用,或者前面进行的初始化操作消失(对象被重建)。这个,可以要求chrome保留display为none的内部控件,只是进行隐藏(但需要大量改动),或者要求网站把display为none改成width=0,height=0,但这对那些切换页面时的none比较难处理。

更多细节有待我们接下来进一步讨论。

* np-activex的稳定性不知如何。
* 我个人使用的经验(在Linux上)是挺稳定的。
* 如果我们想要推广np-activex,将会有许多辛苦的常规测试必须长期做,才能保证稳定性,因为chrome和firefox的更新非常快,说不定在哪一天升级Chrome,网银就不能用了。如果能够开发出自动化测试的套件,可以尽量避免regression,让这个目标离现实更进一些。这方面还得请教各位有没有什么好办法?
* Windows有多个版本,xp,vista,win7, 32位和64位。要同时支持这么多版本是很辛苦的工作。

* np-activex的安全性问题,请大家指教。

[1]http://code.google.com/p/np-activex/

--
Regards,
Qian Hong

-
Sent from Ubuntu
http://www.ubuntu.com/

Qian Hong

unread,
Nov 16, 2011, 9:26:43 AM11/16/11
to non-ie-online-banking
糟糕,最重要的忘了说:

如何使用np-activex: http://bbs.chromi.org/thread-15377-1-1.html
摘要:
* 先正常安装网银安全控件
* 到Chrome app store中下载np-activex
* 到np-activex的选项中设置白名单, 参见:
http://code.google.com/p/np-activex/wiki/ChinaSettings

2011/11/16 Qian Hong <frac...@gmail.com>:

Qian Hong

unread,
Nov 16, 2011, 11:56:52 AM11/16/11
to non-ie-online-banking
2011/11/16 Qian Hong <frac...@gmail.com>:

> * 国内网银页面除了ActiveX以外,还用了许多非标准的javascript(和css),这些情况让网银跨平台的问题变得加倍复杂。

补充一下:
我曾经给工行网银投诉过,其中一次投诉是要求工行网银在保留ActiveX的情况下尽量使用标准的javascript和css。由于时间精力有限,我还没来得及投诉其他银行。不过,其实我自己也知道这种投诉是没效果的,因为
* 客服不是技术人员,很难沟通;技术人员的联系方式普通人很难得到
* 以个人的名义投诉,银行爱理不理。

如果网银可以使用标准的javascript,那么np-activex就可以支持很多网银,不知Kun Hu你们有没有什么办法呢?

Reply all
Reply to author
Forward
0 new messages