Прослушивание HTML-событий от BHO - PullRequest
3 голосов
/ 12 сентября 2009

Я работал над панелью инструментов BHO /, написанной на C #, которая слушает события HTML, возникающие на текущей веб-странице браузера. Решение включает в себя многократно используемый класс HtmlPageEventManager, целью которого является подписка на определенный список событий HTML для каждой новой открытой веб-страницы. Цель состоит в том, чтобы прикрепить обработчики, как только пользователь сможет начать взаимодействовать с элементами страницы, даже до завершения загрузки страницы. Использовать этот класс просто - просто вызовите конструктор:

var evts = new List() {
    HtmlEvent.onclick, HtmlEvent.ondblclick, HtmlEvent.onkeydown,
    HtmlEvent.onselectstart, HtmlEvent.onselectionchange,
    HtmlEvent.onfocus, HtmlEvent.onselect
};
new HtmlPageEventManager( this, evts, this.HtmlEventHandler );

Пожалуйста, , скачайте мое решение здесь , чтобы опробовать его и отправить мне отзыв. Не стесняйтесь использовать это в своих собственных проектах, если Вы находите это полезным. Хотя это работает хорошо, бывают случаи, когда он не может прикрепить события. Мне было трудно определить эти обстоятельства. Поэтому я мог бы использовать некоторую помощь по улучшению HtmlPageEventManager.

Мое решение ссылается на сборки SpicIE , но они не включены в вышеуказанную загрузку, поэтому вам необходимо получить их с сайта SpicIE . Кстати, сейчас самое время спросить: насколько популярен SpicIE? Есть ли лучший инструмент для использования?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

Да! Я преодолел проблему «Обновить», подписавшись на событие DownloadComplete BHO, где я снова вызываю свой вспомогательный метод «RegisterEventHandlers», который присоединяет обработчики событий HTML. Код jeffamaphone, связанный с, был полезен. Я включил свою идею переменной-члена normalPageLoad для условного вызова RegisterEventHandlers. Я также посмотрел на сопроводительное сообщение на форуме . Однако я не могу понять акцент на событии Loaded родительского окна. Я получил свой код, даже не выполняя эту часть. В любом случае, я думаю, что HtmlPageEventManager теперь полностью функционален - стучите по дереву. Пожалуйста, напишите мне, если вы обнаружите случай, в котором он все еще не выполняет свою работу.

0 голосов
/ 12 сентября 2009

Вы обнаружите, что не существует 100% -ного решения сделать это для IE во время загрузки страницы. Это не ваша вина: модель событий IE представляет собой гигантскую массу асинхронного кода спагетти, что делает его очень трудным для понимания. Если у вас есть решение, которое на 95%, я говорю: будьте счастливы и двигайтесь дальше.

...