`
caozuiba
  • 浏览: 903367 次
文章分类
社区版块
存档分类
最新评论

WebBrowser控件的简单应用

 
阅读更多
<iframe marginwidth="0" marginheight="0" src="http://218.16.120.35:65001/PC/Global/images/b.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

第一个简单应用里面讲述的是如何模拟调用当前网页的元素的事件或者赋值/取值。
这次的应用讲述的是
1:如何处理弹出新页面的事件(总是在我的浏览器里面现实新页面)
2:如何处理window.close事件,让我的浏览器页关闭
3:让html页面的js调用我的browse的函数
4:如何让我的browse调用html的js函数。

使用场景:一个web程序,让用户使用自定义浏览器来浏览,该web程序会调用浏览者机器上一些接口。
我的这个浏览器叫做AppBrowser。
关于ObjectForScripting 的介绍http://msdn2.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx
首先,第一个问题。
如果只是放置一个browse在那里,在html中打开新页面的时候,他默认使用IE或者其他浏览器来打开网页。如果想要让我的browse也同时能处理所有的新开页面,就要增加一个对_NewWindow事件的处理。
private void wb_Container_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
AppBrowser newAB = new AppBrowser(wb_Container.Url.ToString());
newAB.Show();
}
在这里要注意的是
1:e.Cancel = true;是为了取消这个事件,不然又打开一个IE
2:wb_Container.Url.接受到的是新页面的参数

关于关闭浏览器
通常,如果设置了这样的js:window.close,那么,IE会自动关闭。但是我的browse却不会,至少默认的是如此的。
为了关闭我的浏览器,我需要接收这个函数。但是,很可惜,找了半天都没找到这个事件在那里处理,于是结合下一个问题,一下子解决了。(其实是半个解决,只有自己写的web程序才能处理)。

关于web调用我的浏览器的函数。
这就成了web和win的交互了,这个win就是在客户端的。以前交互的方式是写一个ActiveX控件,让web调用他,进而访问客户机器上的一些资源。现在的这种方式则是通过自己提供一个符合COM接口的自定义browse来实现。
1:我的browse必须是符合COM接口的[System.Runtime.InteropServices.ComVisibleAttribute(true)]
2:设置一个属性 this.wb_Container.ObjectForScripting = this
这样,Web中就可以这样调用了javascript:window.external.xxx('xx')。比方说上边的那个关闭窗口的调用就可以这样写:
onclick="javascript:window.external.close();"
这个调用,其实是调用的我的browse的Close函数。这个函数是我的winForm上默认的那一个函数。调用其他函数亦然,只要是公开方法就可以。

关于如何browse调用web页面中的函数。
第一个,可以通过直接调用页面中元素的方式来实现,在我上一篇里面有所介绍。
第二个,就是可以直接访问.Document.InvokeScript函数来实现。
比如:
public object InvokeHtmlJsScript(string scriptName,object[] objects)
{
return this.wb_Container.Document.InvokeScript(scriptName, objects);
}


简单的类
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1//setthisclassasaCOM
2[System.Runtime.InteropServices.ComVisibleAttribute(true)]
3publicpartialclassAppBrowser:Form
4{
5publicAppBrowser()
6{
7InitializeComponent();
8}

9/**////<summary>
10///whichtheurlwillbego
11///</summary>
12///<paramname="url"></param>

13publicAppBrowser(stringurl)
14{
15InitializeComponent();
16_url=url;
17this.wb_Container.Navigate(_url);
18this.wb_Container.ObjectForScripting=this;//setthistobetheCOMhandler
19
20}

21privatestring_url;
22publicstringUrl
23{
24get{returnthis._url;}
25}

26/**////<summary>
27///opennewpageinthewindowwhichisalsoinmybrowerbutnotinIE
28///</summary>
29///<paramname="sender"></param>
30///<paramname="e"></param>

31privatevoidwb_Container_NewWindow(objectsender,CancelEventArgse)
32{
33e.Cancel=true;
34AppBrowsernewAB=newAppBrowser(wb_Container.Url.ToString());
35newAB.Show();
36}

37/**////<summary>
38///thisfunctioncanbeinvokedbyjsinhtml
39///likethis'javascript:window.external.ShowMessage('thisisinvokefromweb');'
40///</summary>
41///<paramname="msg"></param>

42publicvoidShowMessage(stringmsg)
43{
44MessageBox.Show(msg);
45}

46/**////<summary>
47///caninvokescriptinthehtmlshowinginthewebbrowser
48///</summary>
49///<paramname="scriptName"></param>
50///<paramname="objects"></param>
51///<returns></returns>

52publicobjectInvokeHtmlJsScript(stringscriptName,object[]objects)
53{
54returnthis.wb_Container.Document.InvokeScript(scriptName,objects);
55}

56}


后记:经过测试,终于找到了一种方法可以解决window.close的问题了(第二个问题)
1privatevoidwb_Container_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse)
2{
3wb_Container.Document.Window.Unload+=newHtmlElementEventHandler(Window_Unload);
4}

5
6voidWindow_Unload(objectsender,HtmlElementEventArgse)
7{
8if(this.wb_Container.Document==null)
9this.Close();
10}

原理:
1:代理window的unload事件。这个事件在页面卸载的时候触发。
2:在这个事件之后检查webbrowser的值。如果是window.close,那么属性为空。
可能这个方法还是不够好,但是现下可用了。
分享到:
评论

相关推荐

    vs2005中的WebBrowser控件的简单应用

    vs2005中的WebBrowser控件的简单应用

    C#使用webBrowser控件获取URL下载图片

    通过C#网络编程的webBrowser获取网页中的url并简单的尝试下载网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识、正则表达式实现浏览、获取url、下载图片三个功能.而且很清晰的解析...

    Webbrowser调用dll,简单方便获取request response header等资源的例子,实现了HttpWebResquest等实现的功能

    老外写的Webbrowser调用dll,简单方便获取request header,response header等各种网络资源的例子,实现了原来只有WebClient,WebRequest和HttpWebResquest才能实现的功能。 需要dll的完整源代码见我上传的另外一个资源...

    webBrowser控件浏览器用于为WEB页面加个应用程序的壳子

    修改bin\Debug目录下的Config.ini文件可更新程序标题,皮肤,及默认网址。 Skin\目录下保存有五个皮肤文件,可用来更换。 编译完成后必要文件及目录为bin\Debug中的: WebForm.exe,IrisSkin2.dll,Config.ini及...

    VB.Net-C#多线程Thread-代理委托delegate编程

    WebBrowser控件的简单应用2.txt 多线程为基于.NET的应用程序实现响应迅速的用户.txt 浅述WinForm多线程编程与Control.Invoke的应用.txt 微软.Net开发中的多线程编程总结.txt 线程中的参数传递.txt

    易语言WEB浏览器2.0#3版(第三方)

    可以使用该控件将基于DHTML 的用户界面元素添加到窗体中,还可以隐瞒这些元素在WebBrowser控件中承载的事实。通过这种方法,可以将 Web 控件和 Windows 窗体控件无缝地整合到一个应用程序中。 易语言WebBrowser2.fne...

    Microsoft Internet Explorer 5程序设计

    把WebBrowser控件作为宿主和使Internet Explorer自动化,以便将Web浏览完全集成到新的或现有的应用程序中。使用Internet Explorer事件和高级宿主接口几用户提供各种功能。开发Web附件,如Explorer Bar、工具栏按钮和...

    易语言-彗星网页操作支持库2.0#3版(第三方)

    可以复制应用程序中的 Internet Explorer Web 浏览功能,还可以禁用默认的 Internet Explorer 功能,并将该控件用作简单的 HTML 文档查看器。可以使用该控件将基于 DHTML 的用户界面元素添加到窗体中,还可以隐瞒...

    易语言-彗星网页操作支持库2.0#3版(静态版)(第三方)

    可以复制应用程序中的 Internet Explorer Web 浏览功能,还可以禁用默认的 Internet Explorer 功能,并将该控件用作简单的 HTML 文档查看器。可以使用该控件将基于 DHTML 的用户界面元素添加到窗体中,还可以隐瞒...

    WPF编程宝典 part1

    2.3.1 简单属性与类型转换器 25 2.3.2 复杂属性 26 2.3.3 标记扩展 28 2.3.4 附加属性 29 2.3.5 嵌套元素 30 2.3.6 特殊字符与空白 32 2.3.7 事件 34 2.3.8 完整的Eight Ball Answer示例 35 2.4 使用其他名称空间中...

    简单的WEB浏览器,VB网页浏览器

    摘要:VB源码,系统相关,网页... 这次程序主要用到了控件的命令应用3个:  ①WebBrowser1. Navigate 是一个转向地址的代码  例如1:【WebBrowser1. Navigate “http:”】表示转向百度网址  例如2:【WebBrowser1. Na

    vc++ 应用源码包_1

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    Visual.Basic.6大学教程.pdf

    19.3 WebBrowser控件 613 19.4 Internet Transfer控件 617 19.4.1 超文本传输协议(HTTP)连接 617 19.4.2 文件传输协议(FTP)连接 619 19.5 Internet Transfer控件的其他属性、方法和事件 621 19.6 Winsock控件 622 ...

    vc++ 应用源码包_2

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    vc++ 应用源码包_3

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    vc++ 应用源码包_6

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    vc++ 应用源码包_5

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    海康监控平台容器,通过web访问的方式整合几个不同时期建设的监控平台以及一大堆nvr。

    使用了c#,webbrowser,指定了webbrowser的版本,在win10X64,win7 32的环境中测试通过。结构相当简单,就是一个有单点登录功能的容器而已,在首页的列表中点击监控点后会链接到相应的平台并自动登录。因为缺乏接口,...

    WebKit.NET-0.5.rar

    WebKit.NET 是一个 C# 的组件封装了 WebKit 浏览器引擎,通过它可以在 .NET 应用中简单的使用 WebKit 浏览器引擎。 使用方法也很简单,首先到 http://webkitdotnet.sourceforge.net/ 下载webkit.net编译好的dll...

    WebKit.NET-0.3.rar

    WebKit.NET 是一个 C# 的组件封装了 WebKit 浏览器引擎,通过它可以在 .NET 应用中简单的使用 WebKit 浏览器引擎。 使用方法也很简单,首先到 http://webkitdotnet.sourceforge.net/ 下载webkit.net编译好的dll...

Global site tag (gtag.js) - Google Analytics