直接顯示Html內容,不像直接導航網址容易處理:
問題:按微軟的控件屬性提示,可以用WebBrowser.DocumentText 屬性賦值 ,但是這種賦值,只是首次有效,后續切換都沒啥作用。
下面給出自己追求摸索的兩點技巧:
1:通過WebBrowser.Document.Write(html)方法來輸出html內容顯示。
由於WebBrowser 需要經歷幾個事件后才會顯示,直接輸出是不行的,為此,需要有點技巧的使用:
while (wbShowBlog.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
wbShowBlog.Document.Write(html)
先導航到空白頁,再輸出需要顯示的Html內容,用這個方法解決。
2:二次顯示內容,應該用節點替換,而不是重新輸出內容
一開始都調用輸出顯示,結果切換內容時,偶爾會出現切換后不顯示新內容的問題。
在多次反復的試驗中,反反復復,時好時壞之后,決定想法處理掉這個問題,為此,本人又想到另一種解決的方式:
{
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竟然顯示不出來,折騰過后,發現刷新一下瀏覽器可以顯示出來,為此,又補上一招,變成:
{
string html = htmlTemplate.Replace("{0}", blogText);
wbShowBlog.Navigate("about:blank");
while (wbShowBlog.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
wbShowBlog.Document.Write(html);//這里有問題,明天處理。
wbShowBlog.Refresh();//不刷新一下,Iframe顯示不出來。
}
else
{
wbShowBlog.Document.GetElementById("weibospiritBody").InnerHtml = blogText;
}
就是多一行刷新,解決了這個問題,以上就是3個細節點。
分享自:http://www.cnblogs.com/cyq1162/archive/2012/03/27/2419655.html