WebBrowser - 想说爱你不容易

huwei001982 2012-06-29 05:25:51
最近项目中需要在 winform 中加载 xhtml 文件并修改,颇废了一些周折,特发文纪念,同时讨论下有没有更好的办法。

在winform中加载网页首先想到的(其实目前也只能使用)当然是使用 WebBrowser 控件,但是。。。这个控件真不太好用。
1. xp 下不支持 xhtml。 使用 Navigate 方法加载本地的一个 xhtml 文件, 居然弹出下载窗口。
(win7 下正常,但是现在xp不还是王道嘛)
肿么办:将文件名改为 html 就行了, 处理完毕后再把文件改回 xhtml。
2. 使用 WebBrowser 打开后, 再通过 document.documentElement.outerHTML 取得的 html 代码中所有的 attribute 的引号全丢失了
例如源文件为 <div class="top" id="my_edit" >
打开后就变成 <div class=top id=my_edit>
3. 同第2点,html 代码的标签全部变成大写
例如源文件为 <div id="my_edit" > </div>
打开后就变成 <DIV id="my_edit"> </DIV>
4. 同第2点,html 代码中的 img 标签自动变成非闭合
例如源文件为 <img src="images/chjy.gif" ></img>
打开后就变成 <IMG src="images/chjy.gif">
5. 同第2点,html 代码中的 BR 标签全部变成非闭合
例如源文件为 <br/>
打开后就变成 <BR>

以上的 2,3,4,5 点在 xhtml 下都是属于不规范的代码,根本无法打开,没办法,只能一个个用正则修改。
附上代码:
//标签全部变小写
html = Regex.Replace(html, @"(?<=\</?)\w+", delegate(Match m)
{
return m.Value.ToLower();
});
//属性值加上双引号
html = Regex.Replace(html, @"=([^""]+?)([\s>])", delegate(Match m)
{
return "=\"" + m.Groups[1].Value + "\"" + m.Groups[2].Value;
});
//img闭合
html = Regex.Replace(html, "(?<=\\<img[^>]+)>", delegate(Match m)
{
return "/>";
}, RegexOptions.IgnoreCase);
//br 闭合
html = Regex.Replace(html, "<BR>", "<br/>", RegexOptions.IgnoreCase);


修改后勉强可以用了,但是不知道有没有后遗症啊。

高手们说说,我这样的作法对吗?

另外再问一下,webbrowser 控件究竟是自带有一个ie内核呢,还是说调用本机上安装的ie内核
...全文
246 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yp19910928 2012-07-02
  • 打赏
  • 举报
回复
不知道,顶一个
叫我三三 2012-07-02
  • 打赏
  • 举报
回复
你把xp上的IE升到IE8试试,我刚试下了,没你说的那种情况,我的是IE8的内核
阿拉敏敏 2012-07-02
  • 打赏
  • 举报
回复
不熟悉。 真心还不知道 那个是什么 菜鸟。。。。up。
nvshenxp 2012-07-02
  • 打赏
  • 举报
回复
用过,半途而废,觉得太复杂不好用。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
最近项目中需要在 winform 中加载 xhtml 文件并修改,颇废了一些周折,特发文纪念,同时讨论下有没有更好的办法。

在winform中加载网页首先想到的(其实目前也只能使用)当然是使用 WebBrowser 控件,但是。。。这个控件真不太好用。
1. xp 下不支持 xhtml。 使用 Navigate 方法加载本地的一个 xhtml 文件, 居然弹出下载窗口。
(wi……
[/Quote]
我认为是自带一些内核,调用本机为默认,我在hade里面声明后可以强制使用他内核渲染,但是这也不能肯定是自带的,因为本机内核也有可能可以强制切换。。。
cpio 2012-07-01
  • 打赏
  • 举报
回复
加载并修改是什么意思?加载的话,按你现在这样能显示就可以了啊。

不知道你要修改是什么意思
huwei001982 2012-07-01
  • 打赏
  • 举报
回复
我擦, 就一个回复。。

没人用过 webbrowser 吗
qldsrx 2012-06-29
  • 打赏
  • 举报
回复
调用本机上安装的ie内核

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧