如何显示stringHTML内容到浏览器控制?
我有ac#win应用程序。 我保存在我的数据库中的HTML格式的文本,但我想显示在我的用户的webbrowser。如何显示stringhtml内容到web浏览器控制?
提前致谢
尝试这个:
webBrowser1.DocumentText = "<html><body>Please enter your name:<br/>" + "<input type='text' name='userName'/><br/>" + "<a href='http://www.microsoft.com'>continue</a>" + "</body></html>";
正如Thomas W.评论的那样 – 我几乎错过了这个评论,但是我也有同样的问题,所以值得重写为我想的答案。
主要的问题是,在webBrowser1.DocumentText
第一次分配给一些HTML后,后续分配没有效果。
由托马斯链接的解决scheme可以在http://weblogs.asp.net/gunnarpeipman/archive/2009/08/15/displaying-custom-html-in-webbrowser-control.aspx中find详细信息,但我会在下面总结以免将来这个网页变得不可用。;
简而言之,由于web浏览器控件的工作方式,每当您想要更改内容时,都必须导航到新页面。 因此作者提出了一种更新控制的方法:
private void DisplayHtml(string html) { webBrowser1.Navigate("about:blank"); if (webBrowser1.Document != null) { webBrowser1.Document.Write(string.Empty); } webBrowser1.DocumentText = html; }
但是我发现,在我目前的应用程序中,我得到一个CastExceptionexceptionif(webBrowser1.Document != null)
。 我不知道为什么这是,但我发现,如果我包裹整个if
块尝试赶上预期的效果仍然有效。 看到:
private void DisplayHtml(string html) { webBrowser1.Navigate("about:blank"); try { if (webBrowser1.Document != null) { webBrowser1.Document.Write(string.Empty); } } catch (Exception e) { } // do nothing with this webBrowser1.DocumentText = html; }
所以每次执行DisplayHtml
的函数DisplayHtml
收到if
语句的CastException,所以if
语句的内容永远都不会到达。 但是,如果我注释掉if
语句以免接收到CastException,那么浏览器控件不会被更新。 我怀疑在Document属性背后还有另外一个副作用,尽pipe它也会抛出一个exception。
无论如何,我希望这有助于人们。
而不是导航到空白,你可以做
webBrowser1.DocumentText="0"; webBrowser1.Document.OpenNew(true); webBrowser1.Document.Write(theHTML); webBrowser1.Refresh();
无需等待事件或其他任何事情。 您可以检查MSDN的OpenNew,而我已经testing了我的项目之一,最初的DocumentText分配,它的工作原理。
出于某种原因,m3z(使用DisplayHtml(string)
方法)提供的代码不适用于我的情况(第一次除外)。 我总是显示来自string的HTML。 这是我与WebBrowser控制之后的版本:
webBrowser1.Navigate("about:blank"); while (webBrowser1.Document == null || webBrowser1.Document.Body == null) Application.DoEvents(); webBrowser1.Document.OpenNew(true).Write(html);
每次为我工作。 我希望它可以帮助别人。
webBrowser.NavigateToString(yourString);
简单的解决scheme,我testing过了
webBrowser1.Refresh(); var str = "<html><head></head><body>" + sender.ToString() + "</body></html>"; webBrowser1.DocumentText = str;
这是一个小小的代码。 它适用于(对我来说)任何后续的Web浏览器控件的HTML代码更改。 您可以根据自己的具体需求进行调整。
static public void SetWebBrowserHtml(WebBrowser Browser, string HtmlText) { if (Browser != null) { if (string.IsNullOrWhiteSpace(HtmlText)) { // Putting a div inside body forces control to use div instead of P (paragraph) // when the user presses the enter button HtmlText = @"<html> <head> <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" /> </head> <div></div> <body> </body> </html>"; } if (Browser.Document == null) { Browser.Navigate("about:blank"); //Wait for document to finish loading while (Browser.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); System.Threading.Thread.Sleep(5); } } // Write html code dynamic Doc = Browser.Document.DomDocument; Doc.open(); Doc.write(HtmlText); Doc.close(); // Add scripts here /* dynamic Doc = Document.DomDocument; dynamic Script = Doc.getElementById("MyScriptFunctions"); if (Script == null) { Script = Doc.createElement("script"); Script.id = "MyScriptFunctions"; Script.text = JavascriptFunctionsSourcecode; Doc.appendChild(Script); } */ // Enable contentEditable /* if (Browser.Document.Body != null) { if (Browser.Version.Major >= 9) Browser.Document.Body.SetAttribute("contentEditable", "true"); } */ // Attach event handlers // Browser.Document.AttachEventHandler("onkeyup", BrowserKeyUp); // Browser.Document.AttachEventHandler("onkeypress", BrowserKeyPress); // etc... } }
m3z推荐的DisplayHtml(string html)为我工作。
为了帮助某人,我还想提一下,最初在我的HTML中有一些空格使HTML无效,所以文本显示为一个string。 当我将HTML粘贴到Visual Studio中时,引入了空格(围绕尖括号)。 因此,如果在尝试本文中提到的解决scheme之后,文本仍然以文本forms出现,则可能需要检查HTML语法是否正确。