C#中WebBrowser的使用

web

其实网络上这类文章很多,我大致从头说说我自己的经验。
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" );

暂时就这样,比较常用的也就是这些了。其它的就让我们在继续使用中慢慢琢磨体会吧。

时间: 2025-01-27 04:56:00

C#中WebBrowser的使用的相关文章

浅析c#中WebBrowser控件的使用方法

以下是对c#中WebBrowser控件的使用方法进行了详细的分析介绍,需要的朋友参考下   首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的.如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第一步只要在form_load中输入 复制代码 代码如下: webBrowser1.Navigate(Application.StartupPath + " /map.html");//引号中为网页代

求助一个vb.net中webbrowser的问题

问题描述 求助一个vb.net中webbrowser的问题 我用vb.net中的webbrowser提取超链接,代码如下: Timer1.Enabled = False Dim web As WebBrowser = WebBrowser1 For Each i As HtmlElement In web.Document.GetElementsByTagName("a") url = url + i.InnerText + i.GetAttribute("href"

mfc-怎么让MFC中Webbrowser控件的大小随对话框变化而变化?

问题描述 怎么让MFC中Webbrowser控件的大小随对话框变化而变化? 我想在你对话框中添加Webbrowser控件,怎么能它的大小随对话框大小变化呢? 解决方案 在OnSize消息处理中用MoveWindow调整 解决方案二: afx_msg void OnSize(UINT nType int cx int cy); 解决方案三: 对话框控件大小随窗口的大小变化而变化MFC对话框中的控件随着对话框大小变化而变化MFC控件随窗口大小变化

Delphi中WebBrowser例程

TWebBrowser平时用得比较多,也收集过大量杂乱无章的技巧.不过东西太多太杂,每到用的时又要重新拼凑一 番,实在是太累.于是早就有写一组WebBrowser例程,打算把常用的一些类似代码整理一下,以便查用.附带完整 工程,见文章末尾. 这是第一篇,关于插入HTML和执行脚本的方法.程序界面如图, 先看代码: 关键代码 { 在 WebBrowser 内执行脚本 用法: Memo1.Lines.add('alert("Hello World!");'); ExecuteScript(

C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)

先说实在的:最终解决办法是实现IDocHostUIHandler接口,在GetHostInfo方法里解决,但"实现接口"意味着QueryInterface.AddRef.Release三个方法必须实现,所以相关代码是:class CMyWebBrowser : public IDocHostUIHandler{public:    CMyWebBrowser() { m_cRef = 0; }    virtual ~CMyWebBrowser() {}     LONG      

急难:win中webBrowser可以调用web中的javascript,但怎么调用web框架集中子框架(frame)的javascript?

问题描述 如题:webBrowser可以调用web中通过:webBrowser1.Document.InvokeScript("jsfunction").ToString();来交互,并获得函数值问题:怎么webBrowser怎么调用web框架集中子框架(frame)中的javascript函数?来获得javascript函数传递的值? 解决方案 解决方案二:document.frames["framsId"].document.jsFunction();

一个关于WinForm中WebBrowser控件的问题?

问题描述 Hi,大家好!我需要在WebBrowser控件中加载一张网页,但是WebBrowser控件会把整个网页全都显示出来,可是我只想显示网页中数据表的内容,这该如何做? 解决方案 解决方案二:不是完全是你要的问题,希望也能有点小帮助ivanx著于2007-8-168:07:09本文的目的是想在WindowsForm中加载虚拟地球的地图.因为,你可以轻易地在HTML页面上加载这些地图,所以我会使用WebBrowser控件.但是如何在WinForm上控制...解决方案三:只能通过解析HTML元素

关于c#中webBrowser 获取百度html元素

问题描述 我想用c#中的webBrowser获取百度搜索完成后,a标签的href地址,如下图:但是我一直获取不到,我的做法是在百度搜索完成后进入webBrowser1_DocumentCompleted方法,通过:HtmlElementCollectionlink=this.webBrowser1.Document.GetElementsByTagName("a");获取到所有a标签,然后遍历所有a标签,取到href属性值:stringgetUrl=link[xx].GetAttrib

vb.net中webbrowser获取子框架代码

问题描述 vb.net中用webbrowser加载有一个有框架的网页,而这个网页中有框架,如何取得子框架的html源文件?在vb中,我在WebBrowser1_DocumentCompleted事件里,用pDisp.Document.documentElement.innerHTML来获取,但在vb.net中却不知怎么取得?请指教!! 解决方案 解决方案二:路过帮顶=============11月6日,论坛升级公告,积分已经做了调整!http://topic.csdn.net/u/2008110