c# - 如何将事件监听器添加到用 C# 为 IE BHO 创建的按钮?

标签 c# internet-explorer bho mshtml

在我的 IE BHO 中,我使用以下方法创建了一个输入按钮元素:

    var button = doc.createElement("input");
    button.setAttribute("value", "myButton"); //next line gets an error
    button.addEventListener("click", openFunction, false); //openFunction is a function inside of the same class

当我尝试调用 button.addEventListener 时,出现“mshtml.IHTMLElement”不包含“addEventListener”的定义错误。我觉得这很奇怪,因为根据这个网站 (http://help.dottoro.com/ljeuqqoq.php),我应该是安全的。

我还看到了this线程,但对于我正在尝试做的事情来说似乎有点矫枉过正,而且我无法让它工作。

最佳答案

终于搞定了。必须使用与我在原始问题中链接的线程类似的方法。

/// Inside the BHO.cs file and in my namespace
/// Generic HTML DOM Event method handler.
///
public delegate void DHTMLEvent(IHTMLEventObj e);

///
/// Generic Event handler for HTML DOM objects.
/// Handles a basic event object which receives an IHTMLEventObj which
/// applies to all document events raised.
///
public class DHTMLEventHandler
{
    public DHTMLEvent Handler;
    HTMLDocument Document;

    public DHTMLEventHandler(HTMLDocument doc)
    {
        this.Document = doc;
    }
    [DispId(0)]
    public void Call()
    {
        Handler(Document.parentWindow.@event);
    }
}
    public void BrowserEventHandler(IHTMLEventObj e)
    {
        try
        {
            if (e.type == "click" && e.srcElement.id == "IDOfmyButton")
            {
                // do something.
                something();
            }
        }
        catch
        {
        }

    }

在我的 OnDocumentComplete 方法中(也在与上面相同的命名空间中 [新手的额外信息]):

            DHTMLEventHandler myHandler = new DHTMLEventHandler(framedoc);
            myHandler.Handler += new DHTMLEvent(this.BrowserEventHandler);
            button.onclick = myHandler;

很多工作只是为了让一个按钮可以点击。在 Firefox 中是一行 :O

关于c# - 如何将事件监听器添加到用 C# 为 IE BHO 创建的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6754968/

相关文章:

c# - Wpf datagrid Enter 键移动下一行

css - IE8/IE9不加载CSS

asp.net - ASP.NET 站点的后退按钮在 IE 7,8 上被禁用

html - 为什么 Internet Explorer 不将 CSS 应用于 "invalid"元素?

c# - 在不同线程中使用mshtml接口(interface)

c# - WPF 数据网格多选

c# - 返回列表前清除 list 的方法好吗?

c# - 是否有用于编写快速 C# 代码片段的交互式 shell?

javascript - 在 IE 中获取页面引用的最可靠方法是什么?

c# - 如何在 IE 保护模式下访问 AppData(从托管 BHO)