重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
UMPLatForm.NET 中MiNiWeb浏览器核心技术详解二
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、做网站、定州网络推广、微信小程序、定州网络营销、定州企业策划、定州品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供定州建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
接上一篇:UMPLatForm.NET 中MiNiWeb浏览器核心技术详解一
3、创建webbrowser扩展组件
从上一节中,我们可以发现上述的所有内容都基本可以归结为两件事:
1. 实现一个iwebbrowser2类型的对象,从中获得application属性
2. 实现dwebbrowserevents2接口来触发事件
实现iwebbrowser2接口
- using System;
- using System.Security;
- using System.Runtime.InteropServices;
- using System.Windows.Forms;
- using System.Security.Permissions;
- namespace MiniBrowser
- {
- ///
- /// An extended version of the
control. - ///
- class ExtendedWebBrowser : System.Windows.Forms.WebBrowser
- {
- private UnsafeNativeMethods.IWebBrowser2 axIWebBrowser2;
- ///
- /// This method supports the .NET Framework infrastructure and is not intended to be used directly from your code.
- /// Called by the control when the underlying ActiveX control is created.
- ///
- ///
- [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
- protected override void AttachInterfaces(objectnativeActiveXObject)
- {
- this.axIWebBrowser2 = (UnsafeNativeMethods.IWebBrowser2)nativeActiveXObject;
- base.AttachInterfaces(nativeActiveXObject);
- }
- ///
- /// This method supports the .NET Framework infrastructure and is not intended to be used directly from your code.
- /// Called by the control when the underlying ActiveX control is discarded.
- ///
- [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
- protected override void DetachInterfaces()
- {
- this.axIWebBrowser2 = null;
- base.DetachInterfaces();
- }
- ///
- /// Returns the automation object for the web browser
- ///
- public object Application
- {
- get { return axIWebBrowser2.Application; }
- }
- System.Windows.Forms.AxHost.ConnectionPointCookie cookie;
- WebBrowserExtendedEvents events;
- ///
- /// This method will be called to give you a chance to create your own event sink
- ///
- [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
- protected override void CreateSink()
- {
- // Make sure to call the base class or the normal events won't fire
- base.CreateSink();
- events = new WebBrowserExtendedEvents(this);
- cookie = newAxHost.ConnectionPointCookie(this.ActiveXInstance, events,typeof(UnsafeNativeMethods.DWebBrowserEvents2));
- }
- ///
- /// Detaches the event sink
- ///
- [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
- protected override void DetachSink()
- {
- if (null != cookie)
- {
- cookie.Disconnect();
- cookie = null;
- }
- }
- ///
- /// Fires when downloading of a document begins
- ///
- public event EventHandler Downloading;
- ///
- /// Raises the
event - ///
- /// Empty
- ///
- /// You could start an animation or a notification that downloading is starting
- ///
- protected void OnDownloading(EventArgs e)
- {
- if (Downloading != null)
- Downloading(this, e);
- }
- ///
- /// Fires when downloading is completed
- ///
- ///
- /// Here you could start monitoring for script errors.
- ///
- public event EventHandler DownloadComplete;
- ///
- /// Raises the
event - ///
- /// Empty
- protected virtual void OnDownloadComplete(EventArgs e)
- {
- if (DownloadComplete != null)
- DownloadComplete(this, e);
- }
- ……
- }
- }
webbrowser控件有两个尚未公开的接口:attachinterfaces()和detachinterfaces()。这些方法用于获得iwebbrowser2接口的引用。
下一步,我们可以添加application属性。
- ///
- /// Returns the automation object for the web browser
- ///
- public object Application
- {
- get { return axIWebBrowser2.Application; }
- }
这个属性可以用来创建一个新窗口,并且当创建新窗口事件触发时将浏览器重定向到这个新窗口。
作者: Edward
出处: http://umplatform.blog.51cto.com/
微博: 腾讯
Email: umplatform@126.com或 406590790@qq.com
QQ 交流:406590790 (请注明:平台交流)
QQ×××流:16653241 或 237326100
关于作者:高级工程师、信息系统项目管理师、数据库系统工程师。专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,曾多次组织并开发多个大型项目,精通DotNet(C#、Asp.NET、ADO.NET、Web Service、WCF),DB原理与技术、SqlServer、Oracle等。熟悉Java、Delhpi及Linux操作系统,有扎实的网络知识。自认在面向对象、面向服务以及数据库领域有一定的造诣。现主要从事DB管理、DB开发、WinForm、WCF、WebService、网页数据抓取以及ASP.NET等项目管理、开发、架构等工作。如有问题或建议,请多多赐教!
本文版权归作者和51CTO博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。