首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在IE9中使用微软超文本标记语言的addEventListener添加事件侦听器?

问如何在IE9中使用微软超文本标记语言的addEventListener添加事件侦听器?
EN

Stack Overflow用户
提问于 2011-02-15 09:58:06
回答 1查看 3.2K关注 0票数 6

addEventListener的MSDN文档说它接受IDispatch *对象形式的回调函数。在C# (我使用的是COM互操作)中,Visual Studio仅将参数类型显示为object。

我找了一个IEventListener接口或者类似的东西,但是没有找到。我应该传什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-16 05:31:15

经过一些研究,我了解到这些COM连接点(事件处理程序)是用DispId(0)指定的。回调函数由如下类的实例表示:

代码语言:javascript
复制
// These attributes may be optional, depending on the project configuration.
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class EventListener
{
    [DispId(0)]
    // The "target" parameter is an implementation detail.
    public void NameDoesNotMatter(object target, IDOMEvent evt) { ... }
}

因为DispId(0)指定了要调用的默认方法,所以方法的实际名称并不重要。但是,方法参数确实很重要。例如,必须为IHTMLElement.onclick分配一个不带参数的回调,而IHTMLElement2.attachEvent使用一个类型为IHTMLEventObj (或IHTMLEventObj2,...,6,甚至只有object)的参数进行回调。

总之,COM IDispatch回调可以在C#中使用COM可见的类实现,该类的方法可以接受正确的参数,并使用[DispId(0)]进行批注。

尽管如此,避免使用W3C DOM Events API的解决方案可能更合适,因为当浏览器出于兼容性考虑使用较低的文档模式时,IE9 DOM对象不支持此方法。例如,使用addEventListener的扩展在像Bing这样的页面上将失败,该页面以IE7模式呈现。

除了通过F12开发人员工具手动设置IWebBrowser2实例使用的文档模式之外,似乎也不可能设置该模式。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4999247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档