Как вызвать пользовательский Javascript в System.Windows.Forms.WebBrowser? - PullRequest
3 голосов
/ 18 сентября 2010

Я загружаю стороннюю веб-страницу, которая содержит следующий код

<script type="text/javascript">
onDomReady(function() { some_code1; });
</script>

в компонент WebBrowser. После выполнения some_code1 мне нужно выполнить некоторые манипуляции с Dom, которые сделают some_code1 недействительным. Вопрос в том, как определить, что some_code1 выполнено?

Не могу

private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    DoRequiredManipulations();
}

Поскольку это событие произойдет до того, как some_code1 выполнится и сделает его недействительным.

Также я не могу сделать

private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    web.Document.InvokeScript("doSome_code1");
    DoRequiredManipulations();
}

Поскольку some_code1 объявлено как анонимная функция.

Кажется, что единственный способ сделать это - это:

private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var script = GetScriptText(web.DocumentText);
    //execute script in webbrowser
    DoRequiredManipulations();
}

Проблема в том, что я не знаю, как выполнить этот скрипт в веб-браузере. Я пытался web.Navigate("javascript: " + script);, но он не работает правильно.

1 Ответ

2 голосов
/ 30 апреля 2011

Я нашел, как это сделать:

HtmlElement scriptEl = web.Document.CreateElement("script");
(scriptEl.DomElement as IHTMLScriptElement).text = "function myscript() { " + script.Text + " }";
web.Document.GetElementsByTagName("head")[0].AppendChild(scriptEl);
web.Document.InvokeScript("myscript");
...