Я используюВыполнение функции JavaScript в экземпляре Internet Explorer
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
для управления/автоматизации экземпляра Internet Explorer. На некоторых страницах я хотел бы запустить функцию JavaScript (init()
). Это, кажется, лучший способ сделать это состоит в использовании InvokeScript
метод HtmlDocument
«s и я пытался следующий без везения:
void ie_DocumentComplete(object pDisp, ref object URL)
{
System.Windows.Forms.HtmlDocument doc = ie.Document;
doc.InvokeScript("init");
}
Что не удается, потому что doc
является недействительным. Я не могу получить System.Windows.Forms.HtmlDocument
от ie.Document
. Помимо рекомендаций, приведенных выше, я также пытался:
System.Windows.Forms.HtmlDocument doc2 = (System.Windows.Forms.HtmlDocument)ie.Document;
и
System.Windows.Forms.HtmlDocument doc2 = ie.Document as System.Windows.Forms.HtmlDocument;
Любые идеи о том, как я могу получить эту работу - или даже лучший способ для запуска сценариев на странице?
Спасибо!
EDIT:
Другой способ запуска функции JavaScript, кажется, быть:
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
mshtml.HTMLDocument doc = ie.Document;
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
win.execScript("init();", "javascript");
Но линия
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
выдает ошибку, что это неверный бросок (InvalidCastException
) - хотя IntelliSense (и MSDN) говорят, что doc.parentWindow
- это IHTMLWindow2
. Есть идеи? (Кроме того, я сделал уверен, что страница полностью загружена перед запуском этого кода)
Ваш ответ, скорее всего, поможет, если вы конкретно объясните, что вы сделали для решения проблемы с потоками. :-) – EricLaw