1

我正在开发 Internet Explorer 的扩展 (BHO),并且无法将 .NET 委托附加到 mshtml 对象以捕获 DOM 事件。

我已经尝试使用由 IHTMLElementEvents2_Event, ... 接口发布的事件,并且它有效,但前提是我为要捕获其事件的 DOM 元素指定了正确的类型。我还需要在代码中指定元素的类型,并且这种技术不允许捕获自定义 DOM 事件。

我也尝试过使用HtmlEventProxy 类,它通过 IHTMLElement2.attachEvent 方法将 IDispatch 对象附加到 DOM 元素,但这对我来说根本不起作用。当我尝试访问该线程中描述的事件对象时,在访问 DOM 元素的文档属性时遇到了挂起。

那么如何在不需要特殊情况下每种元素和每种事件的情况下将事件处理程序附加到 DOM 元素?

谢谢。

4

1 回答 1

3

你可以试试这段代码:

[ComVisible(true)]
public class Foo
{
  public Foo(HtmlDocument doc) 
  {
    IHTMLDocument2 doc2 = (IHTMLDocument2)doc.DomDocument;
    doc2.onkeydown = this;
  }

  [System.Runtime.InteropServices.DispId(0)]
  public void EventHandler()
  {
    IHTMLWindow2 win2 = (IHTMLWindow2)_doc.Window.DomWindow;
    IHTMLEventObj e = win2.@event;

    if (e.keyCode == (int)Keys.F5)
    {
      // ...
    }
  }
}
于 2009-02-04T12:19:30.663 回答