Frage

Ich bin damit beschäftigt, ein BHO (Browser -Helfer -Objekt) in C# zu schreiben, und ich muss Ereignisse an allen Onclick -Ereignissen für Eingabelemente anbringen. Ich verwende den von Visual Studio bereitgestellten Webbrowser nicht, stattdessen starte ich eine neue Instanz des auf dem Client -PC installierten Internet Explorer. Das Problem kommt bei der Verwendung verschiedener Versionen von IE.

In IE7 und IE8 kann ich es so machen:

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);
      }
    }
  }
}

Das funktioniert perfekt, das Ding ist, IE6 macht einen Fehler beim Gießen auf htmlinputelementClass, sodass Sie gezwungen sind, zu desttmlinputelement:

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
      }
    }
  }
}

Das Problem ist, dass ich keinen Weg finden kann, das Ereignis an das DisphtmLinputelement -Objekt anzuhängen. Irgendwelche Ideen?

War es hilfreich?

Lösung

Es stellt sich also heraus, dass Sie, sobald Sie von einem System_COMObject zu einem DisphtmLinputElement -Objekt gegossen haben, mit der Schnittstelle von MSHTML interagieren. Der Code zum Hinzufügen eines Event -Handlers für IE6 ist also:

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")
      {
        HTMLButtonElementEvents_Event htmlButtonEvent = inputElement as HTMLButtonElementEvents_Event;
        htmlButtonEvent.onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
      }
    }
  }
 }

Sie können sich jedoch direkt in den Event -Handler einstellen, aber ich wollte einige Typen wie Passwaord- und Textfelder ausschließen. Daher musste ich zuerst desttmlinputelement desttmlinputelement werfen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top