C#中WebBrowser的使用

简介: 原文:C#中WebBrowser的使用  其实网络上这类文章很多,我大致从头说说我自己的经验。 1、加入引用   在控件栏按右键,选择“添加/移除项”,选COM组件,选中“Microsoft Web Browser”。
原文: C#中WebBrowser的使用

  其实网络上这类文章很多,我大致从头说说我自己的经验。
1、加入引用
  在控件栏按右键,选择“添加/移除项”,选COM组件,选中“Microsoft Web Browser”。然后就可以往窗体上拖出一个该控件(下面把该控件一个对象称为webBrowser)。控件属性中可以调整的不多,从一些资料中得知WebBrowser中的MenuBar、StatusBar等其实都没实现。
(注: .Net 2.0已经专门封装了一个控件,不需要添加COM组件了。)
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;

(注: 以上是.Net 1.1下的代码)
  相当用于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" );
(注: 同样是.Net 1.1的代码)
暂时就这样,比较常用的也就是这些了。其它的就让我们在继续使用中慢慢琢磨体会吧。
(注: 发现这篇文章被很多地方转录了,说明一下,只适用于.Net 1.1)

目录
相关文章
|
7月前
|
JavaScript 前端开发 C#
C# webbrowser控件设置代理IP访问网站
C# webbrowser控件设置代理IP访问网站
412 5
|
C#
C#webBrowser使用代理服务器的方法winform
其实在C#中使用webBrowser大家应该都会了,论坛也有很多相前的例子大家可以查询一下就知道了但是像直接使用浏览器一样设置代理 的方法可能很多人还不知道吧。这个其实是调用一个Dll文件进行设置的,下面大家跟我一起来看看吧首先还是要先建一个结构就是代理信息的结构体如下 [C#] 纯文本查看 复制...
1462 0
|
C#
C# winform webbrowser如何指定内核为IE11? 输出 this.webbrowser.Version 显示版本是IE11的,但实际版本不是啊! 网上打的修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet
最佳答案   1)假设你应用程序的名字为MyApplication.exe 2)运行Regedit,打开注册表,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\...
2442 0
|
C#
C# 修改webbrowser 的 useragent
Also, there is a refresh option in the function (according to MSDN). It worked well for me (you should set it before any user agent change).
2729 0
|
JavaScript C# 前端开发
c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2
原文:c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 可以实现例如通过应用程序操作google搜索,用户输入要搜索的内容,然后在google中搜索;可以自动点击网页上的按钮等功能     1.
2548 0