如何在System.Windows.Forms.WebBrowser中调用自定义Javascript?

时间:2010-09-17 22:43:47

标签: c# .net webbrowser-control

我正在加载包含以下代码的第三方网页

<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();
}

问题是我不知道如何在webbrowser中执行此脚本。我曾尝试web.Navigate("javascript: " + script);,但无法正常使用。

1 个答案:

答案 0 :(得分:2)

我发现了如何做到这一点:

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");