2013-05-10 65 views
3

我正在開發使用Windows Phone 8瀏覽器控件的瀏覽器應用程序。瀏覽器控件NavigateToString顯示HTML代碼而不是渲染頁面

該應用程序使用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); 

回答

5

這是隨着Windows Phone 8

Here你有解決辦法的問題。

+0

謝謝! (順便說一句,你應該編輯你的文章,在這裏添加解決方案!) – aloisdg 2014-04-16 20:32:56

0

WebBrowser.NavigateToString文檔說:

如果文本參數不是有效的HTML格式的,它會顯示爲純文本。

你能檢查str是否有效的HTML格式?

private void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 
    PageString = e.Result; 
    webBrowser.NavigateToString(PageString); 
} 
+0

我測試幾個網站,如CNN.com,BBC.com,Google.com下載。那麼HTML不應該是有效的? – PutraKg 2013-05-10 18:05:27

+0

老實說,它應該是,但不一定是'NavigateToString'方法。您可以嘗試將'str'保存到文件並檢查它是否有效。此外,'webBrowser.NavigateToString(PageString);'應該是'webClient_DownloadStringCompleted'方法的一部分,除非你跟蹤線程同步的響應。 – Abhinav 2013-05-10 18:14:23

+0

我不認爲檢查HTML有效性將解決它。即使http://validator.w3.org/也不呈現。所以'NavigateToString'必須要有別的東西。 – PutraKg 2013-05-10 18:25:18

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); 
+0

刪除Doctype並不是一個好主意,因爲它會破壞你的一些CSS。它會解決問題,是的,但這是有代價的。 – 2014-02-06 10:19:44

+0

你在練習中見過這種情況嗎?不是說你錯了,而是'WebBrowser'控件可能會在內部添加這個控件。 – keyboardP 2014-02-06 11:04:52

+0

是的,這發生在我爲WP8構建的實際應用程序中! – 2014-02-06 11:29:13

0

另一種方式:

 wb.Navigate(""); 
     do 
     { 
      Application.DoEvents(); 
     } while ((wb.ReadyState != WebBrowserReadyState.Complete)); 
     wb.Document.Body.InnerHtml = "Html"; 
+0

Windows手機的Web瀏覽器沒有「文檔」屬性? – Soonts 2013-09-22 21:30:09