Internet Explorer BHO добавить событие onclick - PullRequest
1 голос
/ 23 марта 2012

У меня следующая проблема: Я пишу расширение для Internet Explorer. В процессе я просматриваю DOM и ищу определенные ключевые слова. Эти ключевые слова должны быть выделены, и при нажатии должна быть вызвана функция JavaScript. Траверс и подсветка работ. Но я застрял с событием onclick. Я пробовал несколько разных подходов:

 IHTMLAttributeCollection attributes = element.attributes;
        if (attributes != null)
        {
            for (int i = 0; i < attributes.length; i++)
            {
                IHTMLDOMAttribute a = attributes.item(i);

                if (a.nodeName.Equals("onclick"))
                {
                    a.nodeValue = "alert()";
                }
            }
        }


element.setAttribute("onclick", "javascript:alert()");

Эти два создают правильный текст в DOM, но функциональность не предоставляется.

Другим подходом было использование свойства innerHTML. Этот работал, но его действительно ужасно использовать, потому что я не могу отличить текст от нового начала.

Похоже, IE не разбирает атрибуты

Я благодарен за любую поддержку

ура

Ответы [ 3 ]

1 голос
/ 23 мая 2013

Невероятно полезный ответ Мигеля Анджело здесь делает свою работу Как начать разработку расширений Internet Explorer? .Я верю, что он делает именно то, что вы пытаетесь сделать.Его плагин BHO выделяет текст и вставляет простую функцию javascript onclick.Удачи с вашим плагином!

0 голосов
/ 27 марта 2012

Я не думаю, что вы можете установить обработчик 'onclick', и я не думаю, что вы можете прикрепить событие, если только слой Interop не создает магию, о которой я не знаю.

Собственный способполучить события из IHTMLElement в QueryInterface для IConnectionPointContainer (все в COM, которое поддерживает события, реализует этот интерфейс), а затем использовать метод FindConnectionPoint.Точка подключения, которую вы ищете, имеет идентификатор интерфейса disp: DIID_HTMLElementEvents2.Получив точку подключения, вы советуете (т.е. вызываете метод advise).Вы даете ему объект обратного вызова (в COM это называется «сток»), который реализует интерфейс disp IHTMLElementEvents2 - и один из его методов, который вы должны реализовать, - это щелчок мышью.

в C # вы получитешироко использовать сервисы взаимодействия (пространство имен System.Runtime.InteropServices).Во-первых, вам нужно сослаться на MSHTML (не уверен, но я думаю, что он уже имеет сборку взаимодействия. В противном случае, просто ссылка из COM).Посмотрите на эту статью для точки подключения в COM: http://msdn.microsoft.com/en-us/magazine/cc163361.aspx

0 голосов
/ 23 марта 2012

Вместо встроенного обработчика событий используйте attachEvent или addEventListener (для браузеров, отличных от IE), которые являются API-интерфейсом JavaScript для регистрации событий.

if (element.addEventListener) {  // all browsers except IE before version 9
    element.addEventListener("click", function(){ alert('clicked'); });
}
else if (element.attachEvent) {   // IE before version 9
    element.attachEvent("onclick", function(){ alert('clicked'); });
}
...