【问题标题】:Browser control NavigateToString display HTML code instead of rendering page浏览器控件 NavigateToString 显示 HTML 代码而不是渲染页面
【发布时间】: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); 

【问题讨论】:

    标签: c# html windows-phone-8 webbrowser-control


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多