浏览器控件 NavigateToString 显示 HTML 代码而不是渲染页面
Posted
技术标签:
【中文标题】浏览器控件 NavigateToString 显示 HTML 代码而不是渲染页面【英文标题】:Browser control NavigateToString display HTML code instead of rendering page 【发布时间】:2013-05-05 11:33:46 【问题描述】:我正在使用 Windows Phone 8 浏览器控件开发浏览器应用程序。
应用程序在后台使用 WebClient 将外部网页下载到字符串中。然后浏览器使用
导航到内容webBrowser.NavigateToString(str);
但是,浏览器不会呈现页面,而是显示 html 代码。我认为由于没有对字符串进行任何更改,NavigateToString
应该无缝处理它。或者也许我错过了什么。
那么如何显示 HTML 页面而不是其代码?
编辑
这是我的一些代码
webClient = new WebClient();
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
webClient.DownloadStringAsync(new Uri(uri));
private void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
PageString = e.Result;
...
webBrowser.NavigateToString(PageString);
【问题讨论】:
【参考方案1】:另一种方式:
wb.Navigate("");
do
Application.DoEvents();
while ((wb.ReadyState != WebBrowserReadyState.Complete));
wb.Document.Body.InnerHtml = "Html";
【讨论】:
Windows phone 的网络浏览器没有“文档”属性?【参考方案2】:这是 Windows Phone 8 的问题。
Here 你有一个解决方法。
【讨论】:
谢谢! (顺便说一句,您应该编辑您的帖子以在此处添加解决方案!)【参考方案3】:当您使用DownloadStringAsync
时,它还会下载DOCTYPE
声明。您可以删除它并使用 <html>
块开始您的代码,因为 NavigateToString
似乎不喜欢 <!DOCTYPE HTML>
声明。
webClient = new WebClient();
webClient.DownloadStringCompleted += webClient_DownloadStringCompleted;
webClient.DownloadStringAsync(new Uri(uri));
void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
//remove "<!DOCTYPE HTML>"
PageString = e.Result.Replace("<!DOCTYPE HTML>","").Trim();
webBrowser.NavigateToString(PageString);
【讨论】:
删除 Doctype 不是一个好主意,因为它会破坏您的一些 CSS。它会解决问题,是的,但这是有代价的。 您在实践中看到过这种情况吗?不是说你错了,但WebBrowser
控件可能会在内部预先设置。
是的,这发生在我为 WP8 构建的实际应用中!
问题:我的 CSS 绑定到 html
标签上的一些数据属性。删除 DOCTYPE 似乎也会自动放弃 html
标签!
啊,有趣。如果您使用 CSS,您似乎必须采取将其存储在 IsolatedStorage 中的方法。【参考方案4】:
WebBrowser.NavigateToString 的文档说:
如果文本参数不是有效的 HTML 格式,它将显示为纯文本。
您能否检查str
是否为有效的 HTML 格式?
private void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
PageString = e.Result;
webBrowser.NavigateToString(PageString);
【讨论】:
我测试了从 CNN.com、BBC.com、Google.com 等几个网站下载。那么 HTML 不应该是有效的吗? 老实说,应该是,但不一定是NavigateToString
方法。您可以尝试将str
保存到文件中并检查它是否有效。此外,webBrowser.NavigateToString(PageString);
应该是 webClient_DownloadStringCompleted
方法的一部分,而不是在它之外,除非您使用线程同步跟踪响应。
我认为检查 HTML 有效性不会解决它。即使validator.w3.org 也不会渲染。所以NavigateToString
一定在期待别的东西。
1个快速测试,你能检查m.google.com
或m.cnn.com
是否正在加载?
将NavigateToString
放在方法中并不能解决问题。如果字符串在传递时没有改变,我看不出这有什么不同。 Alsom m.google.com
确实显示了 HTML 代码。 m.cnn.com
重定向到网页,表明必须启用 cookie。以上是关于浏览器控件 NavigateToString 显示 HTML 代码而不是渲染页面的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Windows Phone 8 的 Web 浏览器控件中显示多个选择单词的选项吗?
如何在 MS-Access 的表单上显示 Web 浏览器控件中的表格字段内容?