Я занят написанием BHO (объект помощника браузера) на С#, и мне нужно прикрепить обработчики событий ко всем событиям onclick на элементах ввода. Я НЕ использую встроенный веб-браузер, предоставленный Visual Studio, вместо этого я запускаю новый экземпляр Internet Explorer, установленный на клиентском ПК. Проблема возникает при использовании разных версий IE.
В IE7 и IE8 я могу сделать это так:
public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
HTMLInputElementClass inputElement = el as HTMLInputElementClass;
if (inputElement.IHTMLInputElement_type != "text" && InputElement.IHTMLInputElement_type != "password")
{
inputElement.HTMLButtonElementEvents_Event_onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
}
}
}
}
Это отлично работает, дело в том, что IE6 выдает ошибку при приведении к HTMLInputElementClass, поэтому вы вынуждены приводить к DispHTMLInputElement:
public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
DispHTMLInputElement inputElement = el as DispHTMLInputElement;
if (inputElement.type != "text" && inputElement.type != "password")
{
//attach onclick event handler here
}
}
}
}
Проблема в том, что я не могу найти способ прикрепить событие к объекту DispHTMLInputElement. Любые идеи?