如何将.NET委托附加到mshtml事件?

时间:2008-12-10 23:11:15

标签: c# .net javascript events mshtml

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分: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)
    {
      // ...
    }
  }
}