C# 如何使用MSHTML';IE9中添加了什么样的列表?

C# 如何使用MSHTML';IE9中添加了什么样的列表?,c#,mshtml,internet-explorer-9,addeventlistener,iwebbrowser2,C#,Mshtml,Internet Explorer 9,Addeventlistener,Iwebbrowser2,的MSDN文档表示它接受IDispatch*对象形式的回调函数。从C#(我使用的是COM互操作),VisualStudio将参数类型显示为justobject 我寻找了一个IEventListener接口或类似的东西,但没有找到。我应该传递什么?经过一些研究,我了解到这些COM连接点(事件处理程序)是用DispId(0)指定的。回调函数由类的实例表示,如: // These attributes may be optional, depending on the project configur

的MSDN文档表示它接受
IDispatch*
对象形式的回调函数。从C#(我使用的是COM互操作),VisualStudio将参数类型显示为just
object


我寻找了一个
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
使用一个类型为
ihtmleleventobj
(或
ihtmleleventobj2
,…,
6
,甚至只是
对象
)的参数进行回调

总之,COM
IDispatch
回调可以在C语言中实现,使用COM可视类和接受正确参数并用
[DispId(0)]
注释的方法


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

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