C#WebBrowser,注入JavaScript不会更新HtmlDocument

时间:2013-04-24 07:38:29

标签: c# winforms browser

我正试图解决令我不安的问题。这可能是显而易见的,但我无法弄清楚出了什么问题。

我有一个带有WebBrowser的winform,我以这种方式加载它并且工作正常:

    WebBrowser.DocumentText = someHtmlCode;

在我的winform的webbrowser中,我可以右键单击以获取HTML源代码,并检查代码是否与我在DocumentText属性中设置的相同......此时一切正常。

因此,一旦我将其加载并运行,我会在其中注入一些JavaScript代码,如下所示:

    HtmlElement head = WebBrowser.Document.GetElementsByTagName("head")[0];
    HtmlElement scriptEl = WebBrowser.Document.CreateElement("script");
    IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
    element.text = "function sayHello() { alert('hello') }";
    head.AppendChild(scriptEl);

所以我正在添加一个名为“sayHello”的新JavaScript函数,我可以这样调用它,它仍然可以正常工作:

    WebBrowser.Document.InvokeScript("sayHello");

所以一切都还好,我可以运行JavaScript函数并在WebBrowser中获取警报,但令我不安的是,当我右键单击WebBrowser获取源代码时,我得到相同的代码我设置在开头。没有关于稍后添加的JavaScript代码的跟踪,尽管它存在,因为它在我调用它时起作用。

当然,如果我查看WebBrowser.HtmlDocument,我也看不到JavaScript,这与我查看源代码的情况相同。

所以我的问题是:新的JavaScript代码在哪里以及如何将其恢复?我需要获取更新的HTML代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

源代码不会为您提供更新的文档。要获得更新的文档,您必须使用以下

HtmlElement head = WebBrowser.Document.GetElementsByTagName("head")[0];
string h = head.innerHtml;

唯一的选择是导航顶级节点并获取内部HTML以获取当前的Html状态。