您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 如何对webbrowser和IE编程
如何对webbrowser和IE编程一、因为工作缘故,需要研究对IE编程,所以翻译了MS的有关资料,供参考。IE的体系WebBrowserHost首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowsercontrol的应用程序,可以是vb程序,也可以是vc或者任何其他语言的应用程序。应用程序必须是可容纳activex控件的容器。Webbrowsercontrol既是activexcontrol也是activexdocument的宿主。作为控件,它可以置于任何activex容器,作为文档容器,它针对特殊的类型,调用特殊类型注册的文档server以显示文档。如果你想显示一个.doc文档,webbrowsercontrol装载windowsword,,对于html文档,webbrowser装载名为mshtml的组件(如图所示)。针对不同的文档,你不需要开发不同的应用,仅仅是调用webbrowsercontrol即可。ShdocvwShdocvw.dll包含了webbrowsercontrol,控制webbrowsercontrol(就像控制其他任何activexcom控件一样),提供浏览能力给上层宿主。请注意webbrowsercontrol位于第二级中。甚至IE也不直接而是通过shdocw.dll来使用webbrowsercontrol的。尽管shdocvw提供了大部分的浏览功能,但是并不提供IE窗口的呈现功能。尽管如此,shdocvw还是提供了简单创建web应用程序的能力。之后章节会讲到如何将ie的高级特性加入到你的应用程序。MSHTML早期的mshtml具有读取显示html的功能。MSHTML实际上是一个active文档服务器,但是却可以作为其他控件的容器(如图中所示的)。记得吗,你可以将activex控件置于html中,此时mshtml就是一个activex宿主,还可以控制其他的控件如vbscript脚本引擎和javascript脚本引擎,javaapplet,geszhong,各种插件—别意外,plug-in都是按照ieactivex规范写的。二、WebBrowserControl与InternetExplorer二者又太多的共同点,你都是通过COM接口来访问其功能。当调用webbrowser控件时,使用的是webbrowser对象,在vc中是使用classIDCLSID_WebBrowser的接口类。当自动化ie时,必须建立名为InternetExplorer的对象,vc等语言中使用名为classIDCLSID_InternetExplorer的接口类。接口webbrowser有4个接口(如图),其中3个提供全部的功能,第4个DWebBrowserEvents2接口暴露事件ie4之前,仅有IwebBrowser和IwebBrowserApp两个接口,且二者共享相同的功能,当开发ie4时候,决定加入第三个接口IWebBrowser2扩展webbrowser的功能。该接口派生于第二个接口。IWebBrowserIWebBrowser仅仅是WebBrowsercontrol的最初接口,提供基本的例如导航web页面的功能。作为其他派生接口的基础接口,有8个方法和30个属性。方法描述GoBack导航到历史列表中的上一个页面GoForward导航到历史历表中的下一个项目GoHome导航到缺省页面.GoSearch导航到缺省搜索页面Navigate导航到一个页面或者页面Refresh刷新当前页面Refresh2可以选择刷新级别,如下:REFRESH_NORMAL普通刷新,并且不发送HTTPpragma:nocache到服务器.REFRESH_IFEXPIRED仅仅当页面失效时才发送刷新请求REFRESH_CONTINUE内部使用,不要在编程时使用REFRESH_COMPLETELY发送HTTPpragma:nocacheheader到服务器Stop停止当前导航尽管WebBrowsercontrol提供了你需要的导航回退以及前向的方法,但是没有提供存取历史列表的途径.你可与直接通过属性LocationUR来获取当前页的URL.在VB或者VC++中调用GoBack和GoForward方法式很容易的.你可以使用WebBrowsercontrol或者InternetExplorer对象.举例来讲,在VB中你可以如下调用:WebBrowser1.GoBack'HostingWebBrowsercontrolInternetExplorer1.GoForward'AutomatingInternetExplorerobjectVC++中如下:m_webBrowser.GoBack();//HostingWebBrowsercontrolm_pInternetExplorer-GoForward();//AutomatingInternetExplorerobject尽管GoBack和GoForward方法十分重要,当控制WebBrowsercontrol或者自动化操作InternetExplorer,Navigateis却是最重要的方法.Navigate允许你导航到特定的你所想的web页或者文件.Navigate带有5个参数,允许你指定特定的URL以实现导航以及其他定义导航行为的信息.第一个参数是URL,指示web页的位置和名称或者何处的文件你想装载。(次擦书类型是BSTR.)URL可以是你所使用的标准URL协议类型的一种,例如HTTP和FILE,或者是全路经文件名的本地文件系统,例如C:\MyFile.htm.第二个参数,Flags,你可指定如何或者甚至何处装载特定的URL.(参数的类型是指向VARIANT的指针)Flags的值来自名为BrowserNavConstants的枚举类型,定义于ExDisp.h头文件中且有6个值,详细解释见下列表.你可以指定一个或者多个Flags参数值(请留意有些当前并未实现).navOpenInNewWindow.将导致一个新的窗口打开以显示URL.缺省,如果你在自己的应用程序中控制WebBrowsercontrol,这些值将导致新的InternetExplorer浏览器窗口打开.navNoHistory.指定此URL将不加入到URL历史列表中navNoReadFromCache.当前未实现.navNoWriteToCache.当前未实现.navAllowAutoSearch.如果指定的URL未找到,自动搜索功能将试图导航到通常的顶级域名如.com.net.org以找到正确的URL。如果失败,URL将传递给搜索引擎.navBrowserBar.如果可能,将URL装入到Explorer的地址栏Bar。第三个参数TargetFrameName.指定web页的哪一个frame将会发生导航.(参数的类型是指向VARIANT的指针)此字符串将为以存在于web页中的名字或者一个指定的值如_top或_search._top值指定URL将被当前最顶层web页装入并不在任何一个当前页中存在的frame._search指示搜索面板将被打开.(该值仅在你自动化操控InternetExplorer时发生.)如果你指定的frame名称并未发现,,新的InternetExplorer窗口将被打开。你可以使用PostData参数(第四个)通过HTTPpost事务将指定特定的数据发送到服务器.(参数的类型是指向VARIANT的指针)Post处理用于将在HTML表单收集的数据发送到服务器。如果此参数不指定任何数据,Navigate方法将使用Get方法.另外,如果你不指定HTTP协议的URL(换句话讲,如果你指定例如FILE协议的URL),PostData参数将被忽略。你也可以使用第五个参数,Headers,以发送HTTP头信息到服务器.(T参数的类型是指向VARIANT的指针)这些加入的头信息将被WebBrowser控件如常发送出去.作为PostData参数,如果你并不指定第一个参数,Headers将被忽略.(二)调用Navigate方法比GoBack以及GoForward要困难,但如果你正仅仅导航到URL且并不传递任何附加参数,它的调用很容易。举例来说,VB中导航到Microsoft主页,可如下:WebBrowser1.Navigate如此容易因为所有参数出第一个参数外都可以是可选.如此相对照,VC++不可以省略任何参数.如果你想使用VC++不是勇任何特别的参数导航到Microsoft的homepage,你必须传递空的VARIANT结构。MFC应用程序,你必须如下调用NavigateCOleVariantvtEmpty;m_webBrowser.Navigate(_T(),&vtEmpty,&vtEmpty,&vtEmpty,&vtEmpty);该例子展示了在MFC应用程序中控制WebBrowser控件.我传递一个普通的字符串而替代BSTR因为MFC提供了一个WebBrowser控件的包装类,第一个载包装类中是LPCTSTR,一个普通的字符串.其他参数为指向VARIANT结构的指针。如果你不想指定任何特别的参数,别仅仅传递NULL—那样做,你的应用程序会招来崩溃。你必须传递一个空的VARIANT结构的指针.前面的代码使用了COleVariant类,那是一个与CComVariant类相似的类。COleVariant简单包装了VARIANT使得VARIANT结构易于使用.属性现在你看到了所有的IwebBrowser的方法,你大概向了解其属性。(我是不是太苛求了?)IWebBrowser接口有30个属性,描述于表6-2.我一已按照IWebBrowser的Vtable中的字母序列出。Table6-2.IWebBrowser属性按照vtable排序属性描述Application返回宿主WebBrowser控件的自动化对象(IDispatch)实现,如果对象不可用,则返回的WebbOrwser控件的自动化对象Parent返回WebBrowser控件的父控件的自动化实现(IDispatch),通常是容器—举例来讲,,您的宿主或者InternetExplorer窗口。Container返回WebBrowser控件容器的自动化对象(IDispatch)。通常,该值返回同Parent属性一样的值。.Document返回活动文档的自动化实现(IDispatch)。如果HTML当前显示在WebBrowser,Document属性给出你存取DHTML对象模型的途径.TopLevelContainer返回一个布尔值指示IE是否是WebBRowser控件的顶级容器。在words中,如果IE是宿主应用承需则返回trueType返回已经在WebBrowser中装载的对象的类型。举例,如果HTMLdocument被装载,Type将返回MicrosoftHTMLDocument5.0.如果文档是Word文档,Type返回MicrosoftWordDocument.Left.返回或设置控件在容器窗口左边距Top.返回或设置控件在容器窗口顶部边距Width返回或设置webbrowser控件在窗口中的水平方向的向苏为单位宽度Height返回或设置webbrowser控件在窗口中的处置方向的向像素为单位高度LocationName返回一个WebBrowser当前显示的资源名称的字符串(换句话讲,HTML页,Word文档,,folder,诸如此类)。如果资源是HTML页,字符串是标题。如果资源是文件或者文件夹,字符串为文件名或者文件夹名。—举例,foo.doc(Word文档)或者Temp(tempdirectory.)L
本文标题:如何对webbrowser和IE编程
链接地址:https://www.777doc.com/doc-5730680 .html