浏览器控件 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.comm.cnn.com是否正在加载? NavigateToString 放在方法中并不能解决问题。如果字符串在传递时没有改变,我看不出这有什么不同。 Alsom m.google.com 确实显示了 HTML 代码。 m.cnn.com 重定向到网页,表明必须启用 cookie。

以上是关于浏览器控件 NavigateToString 显示 HTML 代码而不是渲染页面的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Windows Phone 8 的 Web 浏览器控件中显示多个选择单词的选项吗?

如何在 MS-Access 的表单上显示 Web 浏览器控件中的表格字段内容?

基于编辑/浏览模式在 Webpart 中显示/隐藏控件

easyui下的datetimebox日期控件如何设置才能在ie9浏览器下显示。急用,求各位大神帮帮

如何让 WebBrowser 控件显示现代内容?

android WebView控件显示网页