.Net WebBrowser.DocumentText没有改变!

时间:2008-10-06 14:01:03

标签: .net html browser

在我的vb.net程序中,我使用webbrowser向用户显示HTML预览。我之前在服务器上抓取HTML,然后返回异步线程并引发事件以使用我返回的HTML字符串填充WebBrowser.DocumentText。

现在我将其设置为抓取客户端上的所有信息,而不必点击服务器,我正在尝试提升相同的事件。我看着代码经过,它有正确的HTML字符串和一切,但是当我尝试

browser.DocumentText = _emailHTML

DocumentText的内容仍为“<HTML></HTML>

我只是想知道为什么没有设置DocumentText。有人有什么建议吗?

9 个答案:

答案 0 :(得分:54)

尝试以下方法:

browser.Navigate("about:blank");
HtmlDocument doc = browser.Document;
doc.Write(String.Empty);
browser.DocumentText = _emailHTML;

我发现WebBrowser控件通常需要初始化为about:blank。导航到不同类型的内容(例如text / xml到text / html)之间也需要做同样的事情,因为渲染器是不同的(mshtml用于text / html,其他用于text / xml)。

(通过http://geekswithblogs.net/paulwhitblog/archive/2005/12/12/62961.aspx

答案 1 :(得分:32)

我发现以下内容并且有效!

    webBrowser.Navigate("about:blank");
    webBrowser.Document.OpenNew(false);
    webBrowser.Document.Write(html);
    webBrowser.Refresh();

答案 2 :(得分:10)

我发现处理此问题的最佳方法如下:

if (this.webBrowser1.Document == null)
{
    this.webBrowser1.DocumentText = htmlSource;
}
else
{
    this.webBrowser1.Document.OpenNew(true);
    this.webBrowser1.Document.Write(htmlSource);
}

答案 3 :(得分:2)

这对我有用:

webBrowser.Navigate("about:blank");
webBrowser.Document?.Write(htmlString);

答案 4 :(得分:1)

刚刚在我们的一些旧代码中发现了这一点。

_webBrowser.DocumentText = builder.WriteToString( ... );

Application.DoEvents();

显然,DoEvents也会将浏览器踢入渲染

答案 5 :(得分:0)

答案 6 :(得分:0)

虽然Application.DoEvents()在WinForms项目中修复它,但它在WPF项目中无关紧要。

我最终使用webBrowser.Write( htmlContent )(而不是webBrowser.DocumentText = htmlContent)开始工作。

答案 7 :(得分:0)

这始终有效

using mshtml;


private IHTMLDocument2 Document
{
    get
    {
        if (Browser.Document != null)
        {
            return Browser.Document.DomDocument as IHTMLDocument2;
        }

        return null;
    }
}


if (Document == null)
{
    Browser.DocumentText = Contents;
}
else
{
    Document.body.innerHTML = Contents;
}

答案 8 :(得分:0)

确保您没有取消关于:空白页面 WebBrowser 导航事件。在设置 DocumentText 之前, WebBrowser 导航至 about:blank 。 因此,如果您想自己处理链接,则需要创建导航事件的以下处理程序:

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    if(e.Url.OriginalString.StartsWith("about:"))
    {
        return;
    }
    e.Cancel = true;
    // ...
}