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显示不出来。
}
else
{
    wbShowBlog.Document.GetElementById( " weibospiritBody ").InnerHtml = blogText;
}
 
就是多一行刷新,解决了这个问题,以上就是3个细节点。
 
下面感慨几句:
 
现在很少写技术文章了,曾经天天写着文章,如今一个月才写一篇一小而短的文章,忆往昔,往事不堪回首了!

从离职到私奔出来自己折腾,快近一年了,从折腾 秋色园CYQ.Data 数据框架CYQ.DBImport(数据库互导工具)、 CYQ.IISLogViewer(IIS日志分析工具)
 
到现在转战 新浪微博粉丝精灵,一直在忙碌,基本都在一线开发,战线似乎拉的点长,有些都顾不上更新版本了,要做的事太多了,所以没以前那会那么闲了,可以天天写文章。
 
偶尔会发一发微博,有闲可以关注下我的新浪微博:http://weibo.com/cyqdata
 
 
 
      本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/823304 ,如需转载请自行联系原作者


相关文章
|
数据采集
正则表达式匹配html标签,获取标签内容
正则表达式匹配html标签,获取标签内容
|
XML JavaScript 前端开发
具备spring环境的测试头注解;xml 规则;JavaScript:改变 HTML 内容案例
具备spring环境的测试头注解 具备spring环境的测试头注解 test
142 1
具备spring环境的测试头注解;xml 规则;JavaScript:改变 HTML 内容案例
|
JavaScript
【Node.js练习】根据不同的url响应不同的html内容
【Node.js练习】根据不同的url响应不同的html内容
105 1
【Node.js练习】根据不同的url响应不同的html内容
实时显示日期、时间、城市天气(HTML+JS)
实时显示日期、时间、城市天气(HTML+JS)
980 0
实时显示日期、时间、城市天气(HTML+JS)
|
JavaScript 前端开发 BI
04-HTML相关内容总结
04-HTML相关内容总结
89 0
04-HTML相关内容总结
UITextView,UIWebView 直接显示html代码
UITextView,UIWebView 直接显示html代码
68 0
|
前端开发
HTML单行、多行超出不换行显示省略号使用Clamp.js兼容IE
HTML单行、多行超出不换行显示省略号使用Clamp.js兼容IE
117 0
|
移动开发 前端开发 HTML5
[HTML5]嵌入内容
[HTML5]嵌入内容
154 0
[HTML5]嵌入内容