ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 如何在IE9中使用MSHTML的addEventListener添加事件监听器?

2019-05-21 22:54:15  阅读:388  来源: 互联网

标签:c internet-explorer-9 addeventlistener mshtml iwebbrowser2


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

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

解决方法:

经过一些研究,我了解到这些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实例使用的文档模式.

标签:c,internet-explorer-9,addeventlistener,mshtml,iwebbrowser2
来源: https://codeday.me/bug/20190521/1149143.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有