Есть ли способ найти HTMLDocument из IHTMLEventObj, переданного из события загрузки в IE?

Я работаю над вспомогательным объектом браузера на С# (да, я знаю, что производительность будет невысокой).

Я присоединяю обработчик к событию HTMLWindowEvents2_Event.onload моего окна. Событие вызывается правильно (например, когда происходит обновление). Я вижу, что мой обработчик вызывается, и тип правильно отображается как событие «загрузка».

Обработчик событий имеет параметр, поддерживающий IHTMLEventObj. Я не могу понять, как перейти от этого объекта к окну или документу, вызвавшему событие onload. Это вообще возможно из этого интерфейса? Переданный объект имеет нулевое свойство srcElement (предположительно, поскольку это событие, вызванное окном, а не какой-либо элемент в документе).

Нужно ли мне использовать это в другом классе или интерфейсе, чтобы получить доступ к документу?

Буду рад любой помощи в C# или C++.


person iandotkelly    schedule 21.01.2013    source источник


Ответы (1)


Информации об источнике события нет.

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

Class HTMLWindowEvents2Sink
{
    public HTMLWindowEvents2Sink(IHTMLWindow2 eventSource)
    {
        this.eventSource=eventSource;
    }
    IHTMLWindow2 eventSource;
    void AdviseEvent()
    {
        eventSource.load += this.HTMLWindow_onload; 
    }
    ....
}

У вас также есть снижение производительности и потенциальная ферма ошибок, если вы используете делегированную модель обработки событий.

person Sheng Jiang 蒋晟    schedule 22.01.2013