IE的体系和webrowser

IE的体系

WebBrowser Host
首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowser control的应用程序,可以是vb程序,也可以是vc或者任何其他语言的应用程序。应用程序必须是可容纳activex控件的容器。
Webbrowser control既是activex control也是activex document 的宿主。作为控件,它可以置于任何activex容器,作为文档容器,它针对特殊的类型,调用特殊类型注册的文档server以显示文档。如果你想显示一个.doc文档,webbrowser control装载windows word,,对于html文档,webbrowser装载名为mshtml的组件(如图所示)。针对不同的文档,你不需要开发不同的应用,仅仅是调用webbrowser control即可。

Shdocvw
Shdocvw.dll包含了webbrowser control ,控制webbrowser control (就像控制其他任何activex com 控件一样),提供浏览能力给上层宿主。请注意webbrowser control位于第二级中。甚至IE也不直接而是通过shdocw.dll来使用webbrowser control的。尽管shdocvw提供了大部分的浏览功能,但是并不提供IE窗口的呈现功能。尽管如此,shdocvw还是提供了简单创建web 应用程序的能力。之后章节会讲到如何将ie的高级特性加入到你的应用程序。

MSHTML
早期的mshtml具有读取显示html的功能。MSHTML实际上是一个active 文档服务器,但是却可以作为其他控件的容器(如图中所示的)。记得吗,你可以将activex控件置于html中,此时mshtml就是一个activex宿主,还可以控制其他的控件如vbscript 脚本引擎和javascript脚本引擎,java applet ,geszhong,各种插件—别意外,plug-in都是按照ie activex规范写的。

二、
WebBrowser Control 与 Internet Explorer
二者又太多的共同点,你都是通过COM接口来访问其功能。当调用webbrowser控件时,使用的是webbrowser对象,在vc中是使用class ID CLSID_WebBrowser的接口类。
当自动化ie时,必须建立名为 InternetExplorer的对象,vc等语言中使用名为class ID CLSID_InternetExplorer的接口类。

接口
webbrowser有4个接口(如图),其中3个提供全部的功能,第4个DWebBrowserEvents2接口暴露事件
ie4 之前,仅有IwebBrowser和IwebBrowserApp两个接口,且二者共享相同的功能,当开发ie4时候,决定加入第三个接口IWebBrowser2扩展webbrowser的功能。该接口派生于第二个接口。

IWebBrowser
IWebBrowser 仅仅是WebBrowser control的最初接口, 提供基本的例如导航web页面的功能。 作为其他派生接口的基础接口,有8个方法和30个属性。

方法

描述

GoBack

导航到历史列表中的上一个页面

GoForward

导航到历史历表中的下一个项目

GoHome

导航到缺省页面.

GoSearch

导航到缺省搜索页面

Navigate

导航到一个页面或者页面

Refresh

刷新当前页面

Refresh2

可以选择刷新级别,如下:

REFRESH_NORMAL 普通刷新,并且不发送HTTP pragma:nocache 到服务器.

REFRESH_IFEXPIRED 仅仅当页面失效时才发送刷新请求

REFRESH_CONTINUE 内部使用,不要在编程时使用

REFRESH_COMPLETELY 发送HTTP pragma:nocache header 到服务器

Stop

停止当前导航

尽管WebBrowser control 提供了你需要的导航回退以及前向的方法,但是没有提供存取历史列表的途径. 你可与直接通过属性LocationUR来获取当前页的URL.
在VB或者VC++中调用GoBack 和 GoForward 方法式很容易的.你可以使用WebBrowser control 或者 Internet Explorer对象. 举例来讲, 在VB中你可以如下调用:
WebBrowser1.GoBack ' Hosting WebBrowser control
InternetExplorer1.GoForward ' Automating Internet Explorer object

VC++中如下:
m_webBrowser.GoBack(); // Hosting WebBrowser control
m_pInternetExplorer->GoForward(); // Automating Internet Explorer object

尽管 GoBack 和 GoForward 方法十分重要,当控制WebBrowser control或者自动化操作 Internet Explorer, Navigate is 却是最重要的方法.Navigate允许你导航到特定的你所想的web页或者文件. Navigate 带有5个参数, 允许你指定特定的URL以实现导航以及其他定义导航行为的信息.
原文地址:https://www.cnblogs.com/liangxiaofeng/p/5117012.html