我正在加载包含以下代码的第三方网页
<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);
,但无法正常使用。
答案 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");