今天给大家带来一个操作WebBrowser的一些高级方法,我专门写了一个html编辑器的实现代码,有需要的朋友可以自己扩充;
功能实现是直接写流到WebBrowser内不通过临时文件,并且支持对WebBrowser的一些高级控制(其实script可以达到的均可达到,想知道怎么搞的可以阅读代码)。
其中关于IPersistStreamInit接口的声明费了翻工夫,因为以前在 delphi 中没这么麻烦,呵呵。在网络上找了大半天没找到,最后还是祭出Reflector,反编译Windows.Forms,需要的朋友可以不用辛苦的自己搞了!
我在这个演示里,制作的html编辑环境是比简单的,您可以看看,比较比较 CodeProject 上的代码;我采用的是ie自身提供的编辑方法,只是这样的方式都被运用于web方式的编辑器内,就好比这个freeTextBox
以下是主要的代码:
1
/**/
/********************************
2
* 初始化浏览器状态
3
* 指向about:blank
4
* *****************************/
5![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
private
void
Form1_Load(
object
sender, System.EventArgs e)
{
6
object obj = null;
7
this.Show();
8
this.axWb.Navigate("about:blank",ref obj,ref obj,ref obj,ref obj);
9
//等待完成动作
10
while(axWb.ReadyState < SHDocVw.tagREADYSTATE.READYSTATE_INTERACTIVE)
11
Application.DoEvents();
12
13
//初始化html编辑器
14
InitHtmlEditor();
15
}
16
17![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
/**/
/*******************************
18
* 这里是核心方法
19
* 完全调用IE自身的html编辑功能
20
* 可以看到,我采用了一种兼容的
21
* 方式,用Frame(框架),这样
22
* 的话,默认安装的Windows 98都
23
* 支持html编辑功能;
24
* 关键代码如下:
25
* frame.document.designMode = "on";
26
* 表示开启设计模式
27
******************************/
28![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
private
void
InitHtmlEditor()
{
29
string sw = "";
30
sw += "<html>/r/n";
31
sw += "<script language=javascript>/r/n";
32
sw += " function loadSet(){/r/n";
33
sw += " var frame=document.getElementById(/"i-frame/").contentWindow;/r/n";
34
sw += " frame.document.designMode = /"on/";/r/n";
35
sw += " frame.document.open();/r/n";
36
sw += " frame.document.write(/"<html><font color=red>hello 大家好啊!<br>我是S.F. <br>";
37
sw += " <a href=///"http://www2.cnblogs.com/chinasf///">欢迎访问我的weblog</a></font></html>/");/r/n";
38
sw += " frame.document.close();/r/n";
39
sw += " }/r/n";
40
sw += " function setBlod(obj){/r/n";
41
sw += " document.getElementById(/"i-frame/").contentWindow.document.execCommand(/"bold/");/r/n";
42
sw += " }/r/n";
43
sw += "</script>/r/n";
44
//这里加入了一个html的button,也就是说,你可以把web模式的html编辑器的代码完全copy进来
45
sw += "<body οnlοad=/"loadSet()/" scroll=/"yes/"><button οnclick=/"setBlod(this);/">Blod</button>/r/n";
46
sw += "<iframe id=/"i-frame/" frameBorder=/"1/" width=/"640/" height=/"480/"></iframe>/r/n";
47
sw += "</body></html>/r/n";
48
49
//写入浏览器
50
WriteHtml(sw);
51
}
52
53![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
private
void
WriteHtml(
string
s)
{
54
//内存流,用于转换string
55
MemoryStream ms = new MemoryStream();
56![](https://i-blog.csdnimg.cn/blog_migrate/693ada3b225167455deffd2dd501625c.gif)
try
{
57
byte[] htmlcode = System.Text.Encoding.Default.GetBytes(s);
58
ms.Write(htmlcode,0,htmlcode.Length);
59
Stream dataStream = ms;
60
//恢复指针位置
61
dataStream.Seek(0,0);
62
63![](https://i-blog.csdnimg.cn/blog_migrate/693ada3b225167455deffd2dd501625c.gif)
if(axWb.Document!=null)
{
64
//转换接口,并转换为IStream
65
(axWb.Document as UnsafeNativeMethods.IPersistStreamInit).Load(new UnsafeNativeMethods.ComStreamFromDataStream(dataStream));
66
}
67![](https://i-blog.csdnimg.cn/blog_migrate/693ada3b225167455deffd2dd501625c.gif)
}finally
{
68
ms.Close();
69
}
70
}
71
72![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
private
void
button1_Click(
object
sender, System.EventArgs e)
{
73
//获取document,在IHTMLDocument2中取得桢
74
mshtml.IHTMLDocument3 idoc = (mshtml.IHTMLDocument3)axWb.Document;
75
mshtml.IHTMLFrameBase2 fb= (mshtml.IHTMLFrameBase2)idoc.getElementById("i-frame");
76
object obj=null;
77
fb.contentWindow.document.execCommand("bold",true,obj);
78
}
79
80![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
private
void
button3_Click(
object
sender, System.EventArgs e)
{
81
//获取document,在IHTMLDocument2中才有body.style
82
mshtml.IHTMLDocument2 idoc = (mshtml.IHTMLDocument2)axWb.Document;
83
//指定为IHTMLStyle3,才可以定制滚动条颜色
84
mshtml.IHTMLStyle3 istyle = (mshtml.IHTMLStyle3)idoc.body.style;
85
istyle.scrollbarArrowColor = "#0099FF";
86
istyle.scrollbar3dLightColor = "#FFFFFF";
87
istyle.scrollbarDarkShadowColor = "#0099FF";
88
istyle.scrollbarFaceColor = "#99CCFF";
89
istyle.scrollbarHighlightColor = "#0099FF";
90
istyle.scrollbarShadowColor = "#0099FF";
91
istyle.scrollbarTrackColor = "#FFFFFF";
92
93
}
94
95![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
private
void
button2_Click(
object
sender, System.EventArgs e)
{
96
//查看源码,文本方式
97
mshtml.IHTMLDocument3 idoc = (mshtml.IHTMLDocument3)axWb.Document;
98
mshtml.IHTMLFrameBase2 fb= (mshtml.IHTMLFrameBase2)idoc.getElementById("i-frame");
99
MessageBox.Show(fb.contentWindow.document.body.innerText);
100
}
101
102![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
private
void
button4_Click(
object
sender, System.EventArgs e)
{
103
//查看源码,HTML方式
104
mshtml.IHTMLDocument3 idoc = (mshtml.IHTMLDocument3)axWb.Document;
105
mshtml.IHTMLFrameBase2 fb= (mshtml.IHTMLFrameBase2)idoc.getElementById("i-frame");
106
MessageBox.Show(fb.contentWindow.document.body.innerHTML);
107
}
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
4
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
6
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
8
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
9
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
10
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
11
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
12
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
14
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
15
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
16
![](https://i-blog.csdnimg.cn/blog_migrate/90d509cfe8e1e186f579dc242c094cc4.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
18
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
19
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
20
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
21
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
22
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
23
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
24
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
25
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
26
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
27
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
28
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
29
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
30
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
31
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
32
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
33
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
34
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
35
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
36
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
37
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
38
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
39
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
40
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
41
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
42
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
43
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
44
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
45
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
46
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
47
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
48
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
49
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
50
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
51
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
52
![](https://i-blog.csdnimg.cn/blog_migrate/90d509cfe8e1e186f579dc242c094cc4.gif)
53
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
54
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
55
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
56
![](https://i-blog.csdnimg.cn/blog_migrate/693ada3b225167455deffd2dd501625c.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/068bd1a25b0b51fb6da08788358c39a2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
57
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
58
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
59
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
60
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
61
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
62
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
63
![](https://i-blog.csdnimg.cn/blog_migrate/693ada3b225167455deffd2dd501625c.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/068bd1a25b0b51fb6da08788358c39a2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
64
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
65
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
66
![](https://i-blog.csdnimg.cn/blog_migrate/78d7c30cffb9bc3f5ec86591c8061520.gif)
67
![](https://i-blog.csdnimg.cn/blog_migrate/693ada3b225167455deffd2dd501625c.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/068bd1a25b0b51fb6da08788358c39a2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
68
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
69
![](https://i-blog.csdnimg.cn/blog_migrate/78d7c30cffb9bc3f5ec86591c8061520.gif)
70
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
71
![](https://i-blog.csdnimg.cn/blog_migrate/90d509cfe8e1e186f579dc242c094cc4.gif)
72
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
73
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
74
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
75
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
76
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
77
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
78
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
79
![](https://i-blog.csdnimg.cn/blog_migrate/90d509cfe8e1e186f579dc242c094cc4.gif)
80
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
81
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
82
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
83
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
84
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
85
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
86
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
87
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
88
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
89
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
90
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
91
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
92
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
93
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
94
![](https://i-blog.csdnimg.cn/blog_migrate/90d509cfe8e1e186f579dc242c094cc4.gif)
95
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
96
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
97
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
98
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
99
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
100
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
101
![](https://i-blog.csdnimg.cn/blog_migrate/90d509cfe8e1e186f579dc242c094cc4.gif)
102
![](https://i-blog.csdnimg.cn/blog_migrate/9c2247a509da7846502132c498c9877e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ab3f1016243ed4e47bc142f8a6573525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac0f7dd3108e264ba7c685d98d3ee35e.gif)
103
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
104
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
105
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
106
![](https://i-blog.csdnimg.cn/blog_migrate/f7645d6c769ac4b94d30635791407a8b.gif)
107
![](https://i-blog.csdnimg.cn/blog_migrate/a0f20d70922088e96732f36a49d7629d.gif)
这里下载完整工程代码。
2005年4月26日 欢迎指点批评!演示是很简陋的