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