首先多谢朋友们的捧场;
今天给大家带来一个操作WebBrowser的一些高级方法,我专门写了一个html编辑器的实现代码,有需要的朋友可以自己扩充;
功能实现是直接写流到WebBrowser内不通过临时文件,并且支持对WebBrowser的一些高级控制(其实script可以达到的均可达到,想知道怎么搞的可以阅读代码)。
其中关于IPersistStreamInit接口的声明费了翻工夫,因为以前在 delphi 中没这么麻烦,呵呵。在网络上找了大半天没找到,最后还是祭出Reflector,反编译Windows.Forms,需要的朋友可以不用辛苦的自己搞了!
我在这个演示里,制作的html编辑环境是比简单的,您可以看看,比较比较 CodeProject 上的代码;我采用的是ie自身提供的编辑方法,只是这样的方式都被运用于web方式的编辑器内,就好比这个freeTextBox
以下是主要的代码:
1
/********************************
2
* 初始化浏览器状态
3
* 指向about:blank
4
* *****************************/
5
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
/*******************************
18
* 这里是核心方法
19
* 完全调用IE自身的html编辑功能
20
* 可以看到,我采用了一种兼容的
21
* 方式,用Frame(框架),这样
22
* 的话,默认安装的Windows 98都
23
* 支持html编辑功能;
24
* 关键代码如下:
25
* frame.document.designMode = "on";
26
* 表示开启设计模式
27
******************************/
28
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://www.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
private
void
WriteHtml(
string
s)
{
54
//内存流,用于转换string
55
MemoryStream ms = new MemoryStream();
56
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
if(axWb.Document!=null){
64
//转换接口,并转换为IStream
65
(axWb.Document as UnsafeNativeMethods.IPersistStreamInit).Load(new UnsafeNativeMethods.ComStreamFromDataStream(dataStream));
66
}
67
}finally{
68
ms.Close();
69
}
70
}
71
72
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
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
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
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/b8f6622e78f9dd35faae749902b06a3a.jpeg)
2
![](https://i-blog.csdnimg.cn/blog_migrate/d53b634ba0effe8ba6d9aef3cf219bfa.jpeg)
3
![](https://i-blog.csdnimg.cn/blog_migrate/fc5cce50a647d98b9ac68496813ac437.jpeg)
4
![](https://i-blog.csdnimg.cn/blog_migrate/f2cd15f072ca4a4a3c2e97dbe9bb4889.jpeg)
5
![](https://i-blog.csdnimg.cn/blog_migrate/dd4195a2309966e0ffa170b29a09aece.jpeg)
6
![](https://i-blog.csdnimg.cn/blog_migrate/452ce81e79fca621bf8b119cf0caa8b5.jpeg)
7
![](https://i-blog.csdnimg.cn/blog_migrate/1e9457e0e9ce068c12dec5c2ec34f531.jpeg)
8
![](https://i-blog.csdnimg.cn/blog_migrate/4e0a6dd602a813aa03dcc5cd070c29bd.jpeg)
9
![](https://i-blog.csdnimg.cn/blog_migrate/53302cdc811f76c9ea8c2745403aeb5f.jpeg)
10
![](https://i-blog.csdnimg.cn/blog_migrate/031d134ccb18430cdb94d1cd37d43046.jpeg)
11
![](https://i-blog.csdnimg.cn/blog_migrate/33da32eb97364074cc50b9c3884e1d8f.jpeg)
12
![](https://i-blog.csdnimg.cn/blog_migrate/049a5520eae11c9368b0dd3f837b6738.jpeg)
13
![](https://i-blog.csdnimg.cn/blog_migrate/c28b24b3390cc5a0a77bc7c1498f95eb.jpeg)
14
![](https://i-blog.csdnimg.cn/blog_migrate/4085ad8d43ecc724f34f2ea0ac38e628.jpeg)
15
![](https://i-blog.csdnimg.cn/blog_migrate/636549e6f1beeba122ffef05ece48d50.jpeg)
16
![](https://i-blog.csdnimg.cn/blog_migrate/5b161cefa0975d01d62c700678b1181a.jpeg)
17
![](https://i-blog.csdnimg.cn/blog_migrate/4ddd00f2bfa64e053cd608c2c4b7a895.jpeg)
18
![](https://i-blog.csdnimg.cn/blog_migrate/1af52455ae67b5bcfbc911a1ee039567.jpeg)
19
![](https://i-blog.csdnimg.cn/blog_migrate/fa0aaf71a7e62b0a3aee3e32c82e7e0a.jpeg)
20
![](https://i-blog.csdnimg.cn/blog_migrate/f734d6f6647e6b937a74312aa72e142d.jpeg)
21
![](https://i-blog.csdnimg.cn/blog_migrate/ccc588b02a4c2391f286058067381923.jpeg)
22
![](https://i-blog.csdnimg.cn/blog_migrate/4c842e0bc0f42822d4dde046febccc6c.jpeg)
23
![](https://i-blog.csdnimg.cn/blog_migrate/d9319e52a2ef80e4dc372b18c63a7e54.jpeg)
24
![](https://i-blog.csdnimg.cn/blog_migrate/3a283406be5fd508de5a95db698408ea.jpeg)
25
![](https://i-blog.csdnimg.cn/blog_migrate/467ba3f491c06e832e478ea387ddae00.jpeg)
26
![](https://i-blog.csdnimg.cn/blog_migrate/d0bbd7fa7e76afa83009820d951d8033.jpeg)
27
![](https://i-blog.csdnimg.cn/blog_migrate/53fe6d21e10fbc37da91ac22ca35d4bb.jpeg)
28
![](https://i-blog.csdnimg.cn/blog_migrate/d9041973f0bb6ba3fa84a60784f9af1e.jpeg)
29
![](https://i-blog.csdnimg.cn/blog_migrate/dae50dd93daf5eab76863a4efe9376f7.jpeg)
30
![](https://i-blog.csdnimg.cn/blog_migrate/3b6eacc88e07d1def015c6d0434278f8.jpeg)
31
![](https://i-blog.csdnimg.cn/blog_migrate/43004240ff14929c47ce32eea4a6dd59.jpeg)
32
![](https://i-blog.csdnimg.cn/blog_migrate/026684ebb4df4895dd820b53ff3432bf.jpeg)
33
![](https://i-blog.csdnimg.cn/blog_migrate/d18ee16430f826466503bac9e08d7a12.jpeg)
34
![](https://i-blog.csdnimg.cn/blog_migrate/12f656d4bb0054a745758abea4329ee6.jpeg)
35
![](https://i-blog.csdnimg.cn/blog_migrate/0956cf50322d644244be49069ce5748a.jpeg)
36
![](https://i-blog.csdnimg.cn/blog_migrate/c42d8137e07a76348d474d0f3c5569ce.jpeg)
37
![](https://i-blog.csdnimg.cn/blog_migrate/4d73b44f22d58665848f2737804cd042.jpeg)
38
![](https://i-blog.csdnimg.cn/blog_migrate/eec7ef929431991ee3e02d2851f564f9.jpeg)
39
![](https://i-blog.csdnimg.cn/blog_migrate/a4fbda0502344fa3dd3f81e5f461603c.jpeg)
40
![](https://i-blog.csdnimg.cn/blog_migrate/5ecb6b5e0c5914e20fa1838542e5daae.jpeg)
41
![](https://i-blog.csdnimg.cn/blog_migrate/a96508257a5f8654b3c43b127d1b6d54.jpeg)
42
![](https://i-blog.csdnimg.cn/blog_migrate/02163467ea1233de98fe4d615fa68add.jpeg)
43
![](https://i-blog.csdnimg.cn/blog_migrate/08e8672f9c7f8287f867775f625930db.jpeg)
44
![](https://i-blog.csdnimg.cn/blog_migrate/1a6bedbeeffe4b272d1c37be66f70ad2.jpeg)
45
![](https://i-blog.csdnimg.cn/blog_migrate/1a0293602a33ae373d3494ce6655282a.jpeg)
46
![](https://i-blog.csdnimg.cn/blog_migrate/5ca93771115cfa11211b40026be4fac3.jpeg)
47
![](https://i-blog.csdnimg.cn/blog_migrate/94d4f4d3c6e98a576b3bca33c7177495.jpeg)
48
![](https://i-blog.csdnimg.cn/blog_migrate/ec57699f005df37c3695bf5535b1e7d0.jpeg)
49
![](https://i-blog.csdnimg.cn/blog_migrate/7375899b0b11d7516404b8cd75bc9114.jpeg)
50
![](https://i-blog.csdnimg.cn/blog_migrate/2bd8e5e7616b91e201692c288b9685df.jpeg)
51
![](https://i-blog.csdnimg.cn/blog_migrate/8c8d40aa7f064075c2a66433c9a10714.jpeg)
52
![](https://i-blog.csdnimg.cn/blog_migrate/936cbfd93eedb463999195b47c0edb2b.jpeg)
53
![](https://i-blog.csdnimg.cn/blog_migrate/8ff65eb57d75c21f4e84899faf3d8f1d.jpeg)
54
![](https://i-blog.csdnimg.cn/blog_migrate/b05ee40ae8dd27788f15880420ece539.jpeg)
55
![](https://i-blog.csdnimg.cn/blog_migrate/a55397b84bcd07ea4a5f9d40be253a2b.jpeg)
56
![](https://i-blog.csdnimg.cn/blog_migrate/d847c19d29ef3943ba65ed9d2e5492fe.jpeg)
57
![](https://i-blog.csdnimg.cn/blog_migrate/e0c08f5c0218c8232bba1668fbd898e7.jpeg)
58
![](https://i-blog.csdnimg.cn/blog_migrate/a824883f32b7a5f038e2f1aee184a59a.jpeg)
59
![](https://i-blog.csdnimg.cn/blog_migrate/90fa20cc673a1d45764617fcf4c54cff.jpeg)
60
![](https://i-blog.csdnimg.cn/blog_migrate/ed3d96b71f274044ea097b84e402f9f8.jpeg)
61
![](https://i-blog.csdnimg.cn/blog_migrate/fc525fb162872023be5d2003274d15c5.jpeg)
62
![](https://i-blog.csdnimg.cn/blog_migrate/33ad715c9ff7a822c416704459a6a491.jpeg)
63
![](https://i-blog.csdnimg.cn/blog_migrate/cb0a57f523ab7b13c9a53214637c4c34.jpeg)
64
![](https://i-blog.csdnimg.cn/blog_migrate/6fe9458abc735aa9a2b961b5838dee69.jpeg)
65
![](https://i-blog.csdnimg.cn/blog_migrate/96aae9503c868ae76f70160211177e01.jpeg)
66
![](https://i-blog.csdnimg.cn/blog_migrate/592d28db428252ae88affb19cab03174.jpeg)
67
![](https://i-blog.csdnimg.cn/blog_migrate/2d151611ed2050cb70213c4fb8106855.jpeg)
68
![](https://i-blog.csdnimg.cn/blog_migrate/31ef3c6cfe2724f0ce8081edd6d1551c.jpeg)
69
![](https://i-blog.csdnimg.cn/blog_migrate/1d312574691039b794708b565699eae3.jpeg)
70
![](https://i-blog.csdnimg.cn/blog_migrate/c272a04f064c00e8a588c93de3aa1cdb.jpeg)
71
![](https://i-blog.csdnimg.cn/blog_migrate/fee3e79d763d1e688c75546b7d2c214b.jpeg)
72
![](https://i-blog.csdnimg.cn/blog_migrate/4bb4803065581e4989e52d1cecd7f301.jpeg)
73
![](https://i-blog.csdnimg.cn/blog_migrate/d1b0ef0be6a3c22781758b033985baf6.jpeg)
74
![](https://i-blog.csdnimg.cn/blog_migrate/de913dfa8b457c30db1c7d865c274f9a.jpeg)
75
![](https://i-blog.csdnimg.cn/blog_migrate/ee29f8a145285cf2cc403c77b18af420.jpeg)
76
![](https://i-blog.csdnimg.cn/blog_migrate/eab435d2daa190096c667a52e144dade.jpeg)
77
![](https://i-blog.csdnimg.cn/blog_migrate/5c1c193b1599d383f6394d7b7b9d317b.jpeg)
78
![](https://i-blog.csdnimg.cn/blog_migrate/d6a8c5ca7ad08ceea30b82b6aae48b1f.jpeg)
79
![](https://i-blog.csdnimg.cn/blog_migrate/68021c0900ef92a6d12e43b5d8579105.jpeg)
80
![](https://i-blog.csdnimg.cn/blog_migrate/39dc1dc387fe0e20f3f7d0ea2f969d2b.jpeg)
81
![](https://i-blog.csdnimg.cn/blog_migrate/b3ffdc4617ad0fe3045217098921f4b2.jpeg)
82
![](https://i-blog.csdnimg.cn/blog_migrate/1b0341f14e98db6abf91a28379e1aba7.jpeg)
83
![](https://i-blog.csdnimg.cn/blog_migrate/e64282b89e2e0c291b51a0bc5acc8575.jpeg)
84
![](https://i-blog.csdnimg.cn/blog_migrate/12157a05740e7523a632317a4401efaf.jpeg)
85
![](https://i-blog.csdnimg.cn/blog_migrate/06ad9cd8e8083d22172bbdfa09d666d5.jpeg)
86
![](https://i-blog.csdnimg.cn/blog_migrate/300d43df6d42811e514d357bfc715a85.jpeg)
87
![](https://i-blog.csdnimg.cn/blog_migrate/f9e94e281abd5f851d7e04003d3d2bd0.jpeg)
88
![](https://i-blog.csdnimg.cn/blog_migrate/4f6ec00b41b3cfc7edcf177e0abe4691.jpeg)
89
![](https://i-blog.csdnimg.cn/blog_migrate/665049563c632aa41f5bdc6e7eac385c.jpeg)
90
![](https://i-blog.csdnimg.cn/blog_migrate/c696a216e0ad05b1690403c2a9496708.jpeg)
91
![](https://i-blog.csdnimg.cn/blog_migrate/b069734a8393d6a6d09a12f8f62e993c.jpeg)
92
![](https://i-blog.csdnimg.cn/blog_migrate/3b6dbe91916a1532808476764ddea5aa.jpeg)
93
![](https://i-blog.csdnimg.cn/blog_migrate/6b4ce69aeda07aa6b4ef644c117e41fb.jpeg)
94
![](https://i-blog.csdnimg.cn/blog_migrate/077cade1153ccf137dc086917c1aad88.jpeg)
95
![](https://i-blog.csdnimg.cn/blog_migrate/4e5ae38f8adb6f409f3eaa29402a4da8.jpeg)
96
![](https://i-blog.csdnimg.cn/blog_migrate/b32d81f56e96bdd586dd77496d962ada.jpeg)
97
![](https://i-blog.csdnimg.cn/blog_migrate/7e69e02d91ff36e5a592b3f74f34e66d.jpeg)
98
![](https://i-blog.csdnimg.cn/blog_migrate/403e1c61592c38e6f1a066aaf027ae68.jpeg)
99
![](https://i-blog.csdnimg.cn/blog_migrate/b84cbc3b56409f276d41a9ac6d282067.jpeg)
100
![](https://i-blog.csdnimg.cn/blog_migrate/ee55b7527edeb34d251bcf47eba04051.jpeg)
101
![](https://i-blog.csdnimg.cn/blog_migrate/aeffe39823a9655e79ed54c743323f81.jpeg)
102
![](https://i-blog.csdnimg.cn/blog_migrate/dea681db6fbd9d1678df8e4e6f42ac9e.jpeg)
103
![](https://i-blog.csdnimg.cn/blog_migrate/685d72da0e61bb3011d399a1b95f29de.jpeg)
104
![](https://i-blog.csdnimg.cn/blog_migrate/a28a97c9a5d349d63c2ebd96890d8cf2.jpeg)
105
![](https://i-blog.csdnimg.cn/blog_migrate/5432fe63539557a2cb3340aa1444b711.jpeg)
106
![](https://i-blog.csdnimg.cn/blog_migrate/c38bc13ee33fab977c45ce20c697f95a.jpeg)
107
![](https://i-blog.csdnimg.cn/blog_migrate/f5c2457e5039e104145f6789182afd37.jpeg)