我正在为Internet Explorer进行扩展(BHO),并且无法将.NET委托附加到mshtml对象以捕获DOM事件。
我已经尝试过使用IHTMLElementEvents2_Event,...接口发布的事件,但这有效,但前提是我为要捕获其事件的DOM元素指定了正确的类型。我还需要在代码中指定元素的类型,并且此技术不允许捕获自定义DOM事件。
我也尝试使用HtmlEventProxy class,它通过IHTMLElement2.attachEvent方法将IDispatch对象附加到DOM元素,但这对我来说根本不起作用。当我尝试按照this thread中的描述访问事件对象时,我在访问DOM元素的文档属性时会挂起。
那么如何将事件处理程序附加到DOM元素而不需要特殊情况下的每种元素和各种事件?
感谢。
答案 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)
{
// ...
}
}
}