« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
One blog (or more) a day, keep bad mood away, and make life wonderful!
-- by 小生
Blog正在逐步成长中,小生与您共享思维火花,畅想IT时代!
|
Blog信息 |
blog名称:小生杂谈 日志总数:166 评论数量:377 留言数量:1 访问次数:1010512 建立时间:2004年11月7日 |

| |
[.Net技术]C#中WebBrowser的使用 原创空间, 软件技术
Wonderow 发表于 2004/11/23 22:34:42 |
其实网络上这类文章很多,我大致从头说说我自己的经验。1、加入引用 在控件栏按右键,选择“添加/移除项”,选COM组件,选中“Microsoft Web Browser”。然后就可以往窗体上拖出一个该控件(下面把该控件一个对象称为webBrowser)。控件属性中可以调整的不多,从一些资料中得知WebBrowser中的MenuBar、StatusBar等其实都没实现。2、控件的函数 由于是COM过来的控件,它的一些函数就比较怪,基本的Navigate函数除了第一个参数外,其它都是ref类型的,需要显式地写ref才能调用。一般要使之导向到某个页面,先设置一个空对象,object objNull=null;然后webBrowser.Navigate(strPage, ref objNull, ref objNull, ref objNull, ref objNull);即可。具体其它四个参数可参考相关文档。 还有一个常用的功能,就是怎么让浏览器显示自己的html文档,一个方法是用DOM里根元素的innerText: ((mshtml.HTMLDocumentClass)webBrowser.Document).documentElement.innerText=sHTML; 相当用于Javascript设置网页的代码。这种方法方便是方便,但是有很多问题,写入的大部分Javascript函数都没法正常使用,即使用<script defer>似乎也没用;这样不能用前进、后退来进行历史浏览;查看源代码根本看不到什么……其实最致命的就是 Javascript没法用,无法满足一般的需要。 第二个方法是把自己的网页写到一个临时文件,然后navigate到这个文件,Foxmail是这样做的。这样做的缺点是会产生很多临时文件,文件在磁盘上的读写需要耗费较多时间,而且要记得及时清理。 第三个方法是用COM中IPersistStreamInit之类的,使用流操作,据说Outlook便是这样做的。这样显然是最好的,在内存中形成网页进行操作速度也很快。但我在.Net里找不到这个接口,所以不知道如何实现。3、与应用程序交互 网页与应用程序的交互不外乎是网页上点击某链接,或通过其它途径,比如表单提交等,使浏览器导航至新的链接,所以我通过BeforeNavigate2这个事件来,该事件有flags、headers、postData、targetFrameName、uRL等属性,足够我们进行处理。这样我们程序就好像一个WebServer,可以处理网页上的链接、提交的表单等等。然后把使浏览器导航至处理后产生的结果网页。 又在网上看到有人用System.Runtime.InteropServices.Expando.IExpando: mshtml.HTMLDocumentClass doc2=(mshtml.HTMLDocumentClass)webBrowser.Document; System.Runtime.InteropServices.Expando.IExpando ex=(System.Runtime.InteropServices.Expando.IExpando)doc2; System.Reflection.PropertyInfo piform1=ex.AddProperty("Form1"); piform1.SetValue(doc2,this,null); 这样,在网页中的document.Form1就是这个WinForm的Control了。你可以用脚本来调用Form1!这也不失为一个极妙的方法。4、应用程序操作浏览器/网页: WebBrowser浏览器控件提供了一些函数,如ExecWB,可以使浏览器执行内部定义的一些操作,如执行另存为: webBrowser.ExecWB( SHDocVw.OLECMDID.OLECMDID_SAVEAS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref objNull, ref objNull ); 但似乎这里按取消的话会抛出一个异常,所以我用一个空的try{}catch(Exception){}来捕获它,就不会有错误了。 还可以用DOM里的一些方法来操作网页,举个例子,可以这样调用网页中写好的一个Javascript函数func(): ((mshtml.HTMLDocumentClass)webBrowser.Document).parentWindow.execScript( "func()", "JScript" );暂时就这样,比较常用的也就是这些了。其它的就让我们在继续使用中慢慢琢磨体会吧。 |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
zz(游客)发表评论于2009/6/10 15:29:19 |
jeux fille
juegos de ni as
giochi per ragazze |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
Amy(游客)发表评论于2007/4/25 14:39:51 |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
在有些例子就好(游客)发表评论于2007/3/17 12:06:20 |
以下引用lern(游客)在2004-12-14 11:17:34的评论:不错! 了! |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
无知(游客)发表评论于2007/2/11 21:17:29 |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
me(游客)发表评论于2007/1/14 15:36:18 |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
xtive(游客)发表评论于2006/12/25 14:34:01 |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
lern(游客)发表评论于2004/12/14 11:17:34 |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
Wonderow发表评论于2004/12/1 13:22:37 |
可以啊,链接做成与文件名相关的链接,在BeforeNavigate2事件里就能获取该文件名了。 |
|
回复:C#中WebBrowser的使用 原创空间, 软件技术
轮回 (游客)发表评论于2004/11/30 14:41:25 |
我想用ie控件作个资源管理器,请问有办法得到鼠标选中的文件名吗? |
|
» 1 »
|