UMPLatForm.NETMiNiWeb浏览器核心技术详解二

接上一篇:UMPLatForm.NET 中MiNiWeb浏览器核心技术详解一

3、创建webbrowser扩展组件

从上一节中,我们可以发现上述的所有内容都基本可以归结为两件事:

1.实现一个iwebbrowser2类型的对象,从中获得application属性

2.实现dwebbrowserevents2接口来触发事件

实现iwebbrowser2接口

usingSystem;usingSystem.Security;usingSystem.Runtime.InteropServices;usingSystem.Windows.Forms;usingSystem.Security.Permissions;namespaceMiniBrowser{///<summary>///Anextendedversionofthe<seecref="WebBrowser"/>control.///</summary>classExtendedWebBrowser:System.Windows.Forms.WebBrowser{privateUnsafeNativeMethods.IWebBrowser2axIWebBrowser2;///<summary>///Thismethodsupportsthe.NETFrameworkinfrastructureandisnotintendedtobeuseddirectlyfromyourcode.///CalledbythecontrolwhentheunderlyingActiveXcontroliscreated.///</summary>///<paramname="nativeActiveXObject"></param>[PermissionSet(SecurityAction.LinkDemand,Name="FullTrust")]protectedoverridevoidAttachInterfaces(objectnativeActiveXObject){this.axIWebBrowser2=(UnsafeNativeMethods.IWebBrowser2)nativeActiveXObject;base.AttachInterfaces(nativeActiveXObject);}///<summary>///Thismethodsupportsthe.NETFrameworkinfrastructureandisnotintendedtobeuseddirectlyfromyourcode.///CalledbythecontrolwhentheunderlyingActiveXcontrolisdiscarded.///</summary>[PermissionSet(SecurityAction.LinkDemand,Name="FullTrust")]protectedoverridevoidDetachInterfaces(){this.axIWebBrowser2=null;base.DetachInterfaces();}///<summary>///Returnstheautomationobjectforthewebbrowser///</summary>publicobjectApplication{get{returnaxIWebBrowser2.Application;}}System.Windows.Forms.AxHost.ConnectionPointCookiecookie;WebBrowserExtendedEventsevents;///<summary>///Thismethodwillbecalledtogiveyouachancetocreateyourowneventsink///</summary>[PermissionSet(SecurityAction.LinkDemand,Name="FullTrust")]protectedoverridevoidCreateSink(){//Makesuretocallthebaseclassorthenormaleventswon'tfirebase.CreateSink();events=newWebBrowserExtendedEvents(this);cookie=newAxHost.ConnectionPointCookie(this.ActiveXInstance,events,typeof(UnsafeNativeMethods.DWebBrowserEvents2));}///<summary>///Detachestheeventsink///</summary>[PermissionSet(SecurityAction.LinkDemand,Name="FullTrust")]protectedoverridevoidDetachSink(){if(null!=cookie){cookie.Disconnect();cookie=null;}}///<summary>///Fireswhendownloadingofadocumentbegins///</summary>publiceventEventHandlerDownloading;///<summary>///Raisesthe<seecref="Downloading"/>event///</summary>///<paramname="e">Empty<seecref="EventArgs"/></param>///<remarks>///Youcouldstartananimationoranotificationthatdownloadingisstarting///</remarks>protectedvoidOnDownloading(EventArgse){if(Downloading!=null)Downloading(this,e);}///<summary>///Fireswhendownloadingiscompleted///</summary>///<remarks>///Hereyoucouldstartmonitoringforscripterrors.///</remarks>publiceventEventHandlerDownloadComplete;///<summary>///Raisesthe<seecref="DownloadComplete"/>event///</summary>///<paramname="e">Empty<seecref="EventArgs"/></param>protectedvirtualvoidOnDownloadComplete(EventArgse){if(DownloadComplete!=null)DownloadComplete(this,e);}……}}


webbrowser控件有两个尚未公开的接口:attachinterfaces()和detachinterfaces()。这些方法用于获得iwebbrowser2接口的引用。

下一步,我们可以添加application属性。

///<summary>///Returnstheautomationobjectforthewebbrowser///</summary>publicobjectApplication{get{returnaxIWebBrowser2.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联系我,非常感谢。