在我的vb.net程序中,我使用webbrowser向用户显示HTML预览。我之前在服务器上抓取HTML,然后返回异步线程并引发事件以使用我返回的HTML字符串填充WebBrowser.DocumentText。
现在我将其设置为抓取客户端上的所有信息,而不必点击服务器,我正在尝试提升相同的事件。我看着代码经过,它有正确的HTML字符串和一切,但是当我尝试
时browser.DocumentText = _emailHTML
DocumentText的内容仍为“<HTML></HTML>
”
我只是想知道为什么没有设置DocumentText。有人有什么建议吗?
答案 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;
// ...
}