ie 回调函数 html,c# – 如何在IE9中使用MSHTML的addEventListener添加事件监听器?

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

// 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,甚至只是对象)的参数进行回调.

总之,COM IDispatch回调可以在C#中使用COM-visible类实现,其中一个方法接受正确的参数并使用[DispId(0)]进行注释.

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

除了通过F12开发人员工具手动执行此操作外,似乎也无法设置IWebBrowser2实例使用的文档模式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值