.Net WebBrowser.DocumentText不改变!

在我的vb.net程序中,我使用web浏览器向用户显示HTML预览。 我以前打了一个服务器来抓取HTML,然后返回一个asynchronous线程,并引发一个事件来填充WebBrowser.DocumentText与我返回的HTMLstring。

现在我设置它来抓取客户端上的所有信息,而不必打开服务器,我正在尝试提交相同的事件。 我看着代码通过,它具有正确的HTMLstring和一切,但是当我尝试去做

browser.DocumentText = _emailHTML 

DocumentText的内容保持为“ <HTML></HTML>

我只是想知道为什么没有设置DocumentText。 任何人有任何build议?

尝试以下操作:

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

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

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

我发现以下,它的工作!

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

我发现处理这个最好的办法如下:

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

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

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

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

这对我有用:

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

请参考这个答案c#filenotfoundexception在浏览器上?

虽然Application.DoEvents()修复到WinForms项目中,但它在WPF项目中并不重要。

我终于通过使用webBrowser.Write( htmlContent ) (而不是webBrowser.DocumentText = htmlContent )来工作。

这总是有效的

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

确保您不要取消关于WebBrowser的 导航事件:空白页面。 在设置DocumentText之前, WebBrowser导航到about:blank 。 所以如果你想自己处理链接,你需要创buildNavigating事件的以下处理程序:

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