我写了一个允许托管ActiveX控件的火狐插件(只与FF3自动取款机兼容)。
在火焰开始之前-这不是这个问题的主要主题,这个插件的设计考虑到了安全性,所以它不会破坏我最喜欢的浏览器。如果您感兴趣,可以在http://code.google.com/p/ff-activex-host/上进行托管。
现在,我注意到在IE中所有的ActiveX控件都有一个名为OnReadyStateChange的事件可用,然而,并不是所有的ActiveX控件都在其TypeLib中列出了该事件。因此,我的插件无法为每个ActiveX控件注册此事件的处理程序。
用OleView打开这样的控件,我也找不到OnReadyStateChange事件--这让我相信IE可能在这里“作弊”才能让它工作。当OleView显示这样一个处理程序(就像Shockwave ActiveX控件一样)时,我可以毫不费力地为它注册处理程序。
这种控制的一个例子是微软的终端服务ActiveX。但这并不是一个仅限于MS ActiveX控件的问题。
我不是COM对象方面的专家,我是以错误的方式还是在错误的位置搜索事件?
现在我想我这样做是对的,因为OleView也找不到它,所以...
我是否可以像IE一样“作弊”,并使此事件可用?
发布于 2009-02-17 09:59:44
是的,IE会作弊。您在IE中实际拥有的是在COM世界中我们称为聚合对象的东西。IE将创建一个COM类的实例,用于表示ActiveX对象,并将该实例与ActiveX类的实际实例聚合,从而创建一个复合对象。
此组合看起来是具有新功能的单个对象。
因此,我认为你根本不需要担心OnReadyStateChange。
https://stackoverflow.com/questions/556091
复制相似问题