Запуск функции JavaScript в экземпляре Internet Explorer

Я использую

SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()

для управления / автоматизации экземпляра Internet Explorer. На некоторых страницах я хотел бы запустить функцию JavaScript ( init () ). Кажется, лучший способ сделать это - использовать метод InvokeScript , и я безуспешно пытаюсь сделать следующее:

void ie_DocumentComplete(object pDisp, ref object URL)
{
  System.Windows.Forms.HtmlDocument doc = ie.Document;
  doc.InvokeScript("init");
}

. Документ является нулевым. Я не могу получить 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;

Любые идеи о том, как заставить это работать - или еще лучший способ запуска сценариев на странице?

Спасибо !!

РЕДАКТИРОВАТЬ :

Другой способ запуска функции 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 . Любые идеи? (Как и я' перед выполнением этого кода мы убедились, что страница полностью загружена)

7
задан bluish 2 February 2012 в 16:01
поделиться

2 ответа

Проблема была связана с потоками - я потратил столько времени на проблемы с STA, что можно подумать, что я уже научился :).

Как бы то ни было, я нашел способ заставить работать второй кусок кода, который я разместил, и запускать функции javascript в окне IE! Вот код:

this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
                {

                        mshtml.HTMLDocument doc = ie.Document;

                        mshtml.IHTMLWindow2 win = doc.parentWindow as IHTMLWindow2;
                        win.execScript("init();", "javascript");


                }));

Надеюсь, это кому-нибудь поможет!

6
ответ дан 6 December 2019 в 21:08
поделиться

SHDocVw.InternetExplorer.Document имеет тип mshtmlHTMLDocumentClass, поэтому вам нужно ссылаться на Microsoft.mshtml

mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)ie.Document;

Объект ie также должен куда-то перейти, чтобы документ имел значение. например

object test = new object();
ie.Navigate("c:\\tmp\\test1.html", ref test, ref test, ref test, ref test);

Total init:

SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
object test = new object();
ie.Navigate("c:\\tmp\\test1.html", ref test, ref test, ref test, ref test);
mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)ie.Document;
0
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: