2009-02-17 67 views
1

我编写了一个允许托管ActiveX控件的Firefox插件(仅与FF3 atm兼容)。
在燃烧开始之前 - 这不是这个问题的主要话题,并且该插件的设计考虑到安全性,因此它不会中断我最喜欢的浏览器。如果你有兴趣,它在http://code.google.com/p/ff-activex-host/托管。ActiveX控件中的OnReadyStateChange事件

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

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

这种控件的一个例子是微软的终端服务ActiveX。但这不仅限于MS ActiveX控件的问题。

我不是COM对象的专家,我是以错误的方式或错误的地方搜索事件吗?
现在我想我做得很对,因为OleView无法找到它,所以...

我可以以某种方式'作弊'的方式IE浏览器做,并使该事件可用无论如何?

回答

2

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

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

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

+0

谢谢!如果您能指出我自己需要做什么来实现这样一个总体的总体方向,我也会很感激。 很难找到msdn上的任何东西,除非你有一个开始的API调用的名称。 – 2009-02-17 12:03:16