【问题标题】:How can I attach a .NET delegate to an mshtml event?如何将 .NET 委托附加到 mshtml 事件?
【发布时间】:2010-09-26 08:32:28
【问题描述】:

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

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

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

那么我怎样才能将事件处理程序附加到 DOM 元素而不需要特殊情况下的每种元素和每种事件呢?

谢谢。

【问题讨论】:

    标签: c# .net javascript events mshtml


    【解决方案1】:

    你可以试试这个代码:

    [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)
        {
          // ...
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多