天天看點

WebBrowser 顯示Html内容不得不知的技巧

先上技術内容,後面再感慨幾句:

在圖檔的右側,是一個WebBrowser 控件,用來顯示新浪微網誌的内容給使用者評論,然則卻遇到不少問題。

直接顯示Html内容,不像直接導航網址容易處理:

問題:按微軟的控件屬性提示,可以用WebBrowser.DocumentText 屬性指派 ,但是這種指派,隻是首次有效,後續切換都沒啥作用。

為決定這個問題,自己花了點時間研究與摸索。 

下面給出自己追求摸索的兩點技巧:

1:通過WebBrowser.Document.Write(html)方法來輸出html内容顯示。

 由于WebBrowser 需要經曆幾個事件後才會顯示,直接輸出是不行的,為此,需要有點技巧的使用:

wbShowBlog.Navigate("about:blank");

while (wbShowBlog.ReadyState != WebBrowserReadyState.Complete)

{

     Application.DoEvents();

}

wbShowBlog.Document.Write(html) 

先導航到空白頁,再輸出需要顯示的Html内容,用這個方法解決。

2:二次顯示内容,應該用節點替換,而不是重新輸出内容

一開始都調用輸出顯示,結果切換内容時,偶爾會出現切換後不顯示新内容的問題。

在多次反複的試驗中,反反複複,時好時壞之後,決定想法處理掉這個問題,為此,本人又想到另一種解決的方式:

if (wbShowBlog.Document == null)

 string html = htmlTemplate.Replace("{0}", blogText);

 wbShowBlog.Navigate("about:blank");

 while (wbShowBlog.ReadyState != WebBrowserReadyState.Complete)

 {

    Application.DoEvents();

   }

   wbShowBlog.Document.Write(html);//這裡有問題,明天處理。

else

       wbShowBlog.Document.GetElementById("weibospiritBody").InnerHtml = blogText;

第二次時,通過直接切換内部某節點的InnerHtml來顯示内容,而不是重新對浏覽器指派,通過這個方式,完美的解決了這個問題。

3:Document.Write(html) 帶iframe時,解決iframe預設不顯示的神秘問題

終于,直到某天,新的政策變化,内容下方的廣告,不是直接顯示内容,而且想套一個iframe來顯示網頁位址,這時候又發現新問題:

通過Document.Write出來的iframe竟然顯示不出來,折騰過後,發現重新整理一下浏覽器可以顯示出來,為此,又補上一招,變成:

if (wbShowBlog.Document == null)   

   string html = htmlTemplate.Replace("{0}", blogText);

   wbShowBlog.Navigate("about:blank");

   while (wbShowBlog.ReadyState != WebBrowserReadyState.Complete)

   {

      Application.DoEvents();

    wbShowBlog.Document.Write(html);//這裡有問題,明天處理。

    wbShowBlog.Refresh();//不重新整理一下,Iframe顯示不出來。

    wbShowBlog.Document.GetElementById("weibospiritBody").InnerHtml = blogText;

就是多一行重新整理,解決了這個問題,以上就是3個細節點。

下面感慨幾句:

現在很少寫技術文章了,曾經天天寫着文章,如今一個月才寫一篇一小而短的文章,憶往昔,往事不堪回首了!

      本文轉自cyq1162 51CTO部落格,原文連結:http://blog.51cto.com/cyq1162/823304,如需轉載請自行聯系原作者

繼續閱讀