J'utiliseExécution d'une fonction JavaScript dans une instance d'Internet Explorer
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
pour contrôler/automatiser une instance d'Internet Explorer. Sur certaines pages, je voudrais exécuter une fonction JavaScript (init()
). Il semble que la meilleure façon de le faire est d'utiliser une méthode de InvokeScript
HtmlDocument
et je l'ai essayé ce qui suit à pas de chance:
void ie_DocumentComplete(object pDisp, ref object URL)
{
System.Windows.Forms.HtmlDocument doc = ie.Document;
doc.InvokeScript("init");
}
qui échoue parce que doc
est nulle. Je ne peux pas sembler obtenir un System.Windows.Forms.HtmlDocument
de ie.Document
. En plus d'essayer ce qui précède, j'ai aussi essayé:
System.Windows.Forms.HtmlDocument doc2 = (System.Windows.Forms.HtmlDocument)ie.Document;
et
System.Windows.Forms.HtmlDocument doc2 = ie.Document as System.Windows.Forms.HtmlDocument;
Toutes les idées sur la façon dont je peux obtenir ce travail - ou une meilleure façon d'exécuter des scripts sur la page?
Merci!
EDIT:
Une autre façon d'exécuter une fonction JavaScript semble être:
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
mshtml.HTMLDocument doc = ie.Document;
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
win.execScript("init();", "javascript");
Mais la ligne
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
génère une erreur qu'il est une distribution non valide (InvalidCastException
) - même si IntelliSense (et MSDN) disent doc.parentWindow
est un IHTMLWindow2
. Des idées? (Aussi je me suis assuré d'une page a été complètement chargée avant d'exécuter ce code)
Votre réponse serait plus susceptible de vous aider si vous expliquiez précisément ce que vous avez fait pour résoudre le problème de threading. :-) – EricLaw