Как добавить прослушиватель событий для моей кнопки, созданной в C # для IE BHO? - PullRequest
2 голосов
/ 20 июля 2011

В моем 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) я должен быть в открытом виде.

Я также видел эту ветку, но мне кажется, что это излишнее из-за того, что я пытаюсь сделать, и я не могу заставить его работать.

1 Ответ

2 голосов
/ 21 июля 2011

Наконец получил его на работу. Пришлось использовать метод, аналогичный теме, которую я связал в исходном вопросе.

/// 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

...