ActiveX控件中的OnReadyStateChange事件

时间:2009-02-17 09:34:04

标签: com activex

我写了一个Firefox插件(只与FF3 atm兼容),允许托管ActiveX控件 在火炬开始之前 - 这不是这个问题的主题,插件的设计考虑了安全性,因此它不会破坏我最喜欢的浏览器。如果您有兴趣,可以在http://code.google.com/p/ff-activex-host/托管。

现在,我注意到在IE中,所有ActiveX控件都有一个名为OnReadyStateChange的事件,但并非所有ActiveX控件都在其TypeLib中列出了该事件。因此,我的插件无法为每个ActiveX控件注册此事件的处理程序。

使用OleView打开这样的控件,我也找不到OnReadyStateChange事件 - 让我相信IE可能会在这里'作弊'以使其正常工作。当OleView显示这样的处理程序时(与Shockwave ActiveX控件一样),我没有为它注册处理程序的麻烦。

此类控件的一个示例是Microsoft的终端服务ActiveX。但这不仅限于MS ActiveX控件。

我不是COM对象的专家,我是以错误的方式还是在错误的地方搜索事件? 现在我觉得我做得对,因为OleView也找不到它,所以......

我可以以某种方式'欺骗',就像IE一样,让这个事件可用吗?

1 个答案:

答案 0 :(得分:2)

是IE会作弊。你在IE中实际拥有的是COM世界中我们称之为聚合对象的东西。 IE将创建一个COM类的实例,用于表示ActiveX对象,并将其与ActiveX类的实际实例进行聚合,从而创建一个复合对象。

此合成似乎是具有新功能的单个对象。

因此我认为你根本不需要担心OnReadyStateChange。