IAusführen einer JavaScript-Funktion in einer Instanz von Internet Explorer
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
bin mit einer Instanz von Internet Explorer zu steuern/automatisieren. Auf bestimmten Seiten möchte ich eine JavaScript-Funktion ausführen (init()
). Es scheint der beste Weg, dies zu tun, ist ein HtmlDocument
‚s InvokeScript
Methode zu verwenden, und ich habe kein Glück folgendes versucht:
void ie_DocumentComplete(object pDisp, ref object URL)
{
System.Windows.Forms.HtmlDocument doc = ie.Document;
doc.InvokeScript("init");
}
Welche schlägt fehl, weil doc
null ist. Ich kann nicht scheinen System.Windows.Forms.HtmlDocument
von ie.Document
zu bekommen. Neben den oben genannten Versuch habe ich auch versucht:
System.Windows.Forms.HtmlDocument doc2 = (System.Windows.Forms.HtmlDocument)ie.Document;
und
System.Windows.Forms.HtmlDocument doc2 = ie.Document as System.Windows.Forms.HtmlDocument;
Alle Ideen, wie ich diese Arbeit bekommen kann - oder eine noch bessere Möglichkeit, Skripte auf der Seite laufen zu lassen?
Danke !!
EDIT:
Eine weitere Möglichkeit, eine JavaScript-Funktion ausführen zu sein scheint:
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
mshtml.HTMLDocument doc = ie.Document;
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
win.execScript("init();", "javascript");
Aber die Linie
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
wirft einen Fehler, dass es eine ungültige Besetzung ist (InvalidCastException
) - obwohl IntelliSense (und MSDN) sagen doc.parentWindow
ist ein IHTMLWindow2
. Irgendwelche Ideen? (Auch habe ich sicher, dass eine Seite vollständig geladen ist, bevor ausgeführt, dass Code)
Ihre Antwort würde eher helfen, wenn Sie speziell erklären, was Sie getan haben, um das Threading-Problem zu lösen. :-) – EricLaw