Прослушивание событий HTML из BHO
-
06-07-2019 - |
Вопрос
Я работал над 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?Есть ли лучший инструмент для использования?
Решение
Ага!Я преодолел проблему «Обновить», подписавшись на событие DownloadComplete BHO, где я снова вызываю свой вспомогательный метод «RegisterEventHandlers», который подключает обработчики событий HTML.Код jeffamaphone, на который ссылается, оказался полезным.Я включил идею переменной-члена «normalPageLoad» для условного вызова RegisterEventHandlers.я тоже посмотрела сопутствующее сообщение на форуме.Однако я не могу понять акцент на событии Loaded родительского окна.Я заработал свой код, даже не выполняя эту часть.В любом случае, я думаю, что HtmlPageEventManager теперь полностью функционален — постучите по дереву.Пожалуйста, сообщите мне, если вы обнаружите случай, в котором он все еще не выполняет свою работу.
Другие советы
Вы обнаружите, что не существует 100% -ного решения сделать это для IE во время загрузки страницы. Это не ваша вина: модель событий IE представляет собой гигантскую массу асинхронного кода спагетти, что делает его очень трудным для понимания. Если у вас есть решение на 95%, я говорю: будьте счастливы и двигайтесь дальше.