IWebBrowserAppIWebBrowserApp 接口仅仅在IE中实现。 典型的,你使用InternetExplorer 对象创建一个IE的实例. 然后你使用 IWebBrowserApp 接口操纵此实例. (今天采用IWebBrowser2 替代) IWebBrowserApp 接口继承自 IWebBrowser, 所以它提供 IWebBrowser 的全部功能。
因为IWebBrowserApp呈现一个IE窗口的实例, 所以它的方法和属性典型地允许你控制浏览器窗口的用户接口。 这些方法和属性并非包含在WebBrowser的 IWebBrowser 中的:寄宿control的应用程序提供诸如状态条, 工具条, 以及菜单条等用户接口. WebBrowser 控件仅仅用于装载web页以及其它类型文件。
IWebBrowserApp 有4个方法和10 各属性。
方法 IWebBrowserApp 接口的属性很直观立如下表, 但是有2个有理由值的讨论:GetProperty 和 PutProperty. 此两个方法允许你在IE属性包(property bag)中存储一个属性一边你能够在其后重新找回他们。 你将典型地从一个web页上存储一些状态信息到另一个web页 (事实上,使用IWebBrowser2 接口你可以在宿主一个WebBrowser 控件时候使用此方法)
Table 6-3. IWebBrowserApp vtable 次序的方法
方法
描述
Quit
促使 Internet Explorer 窗口关闭。换句话讲,将自动化操作关闭IE实例
ClientToWindow
转换一个点从窗口坐标到客户坐标。
PutProperty
存储一个属性值到ie的属性包,将可以随手采用GetProperty.获取
GetProperty
获取先前由 PutProperty.方法存储的属性值
VB代码:
InternetExplorer1.PutProperty "CurrentPicture", 10
InternetExplorer1.GetProperty("CurrentPicture")
VC++代码:
CSomeClass::PutGetProperty(VARIANT vtCurrentValue, VARIANT* vtNewValue)
{
HRESULT hr;
hr = m_pInternetExplorer->PutProperty(L"CurrentPicture",
vtCurrentValue);
if (SUCCEEDED(hr))
{
// Notice that vtNewValue is already a pointer, so you
// don't have to pass the address to GetProperty.
//
hr = m_pInternetExplorer->GetProperty(L"CurrentPicture",
vtNewValue);
}
return hr;
}
PutGetProperty 方法接受包含当前属性值的 VARIANT 变量指针且将接收属性值。
属性 IWebBrowserApp 接口有10 个属性. Table 6-4. IWebBrowserApp vtable 次序的属性
属性
描述
Name
返回对象的名称t. (举例,当自动化IE, Name 属性将返回 Microsoft Internet Explorer.)
HWND
返回IE窗口的句柄
FullName
返回ie可执行文件的全路径 (iexplore.exe).
Path
返回IE应用程序的全路径.
Visible
监测和设置IE窗口是否可见。 (换句话讲,你可与使用此属性显示/隐藏)
StatusBar
显示或者隐藏IE状态条,也可监测当前状态条
StatusText
设置或隐藏状态条文字
ToolBar
显示或者隐藏IE工具条,也可监测当前工具条状态
MenuBar
显示或者隐藏IE菜单条,也可监测当前工具菜单态
FullScreen
设置或者检测一个值指示IE当前是否最大化显示。最大化显示,iE占据整个屏幕
Table 6-4 中的属性列表直截了当且易于使用。举例来说, 如果你想从你的Vb程序中获取IE状态条中的文字,你应当使用如下代码:
Dim strStatusText
strStatusText = InternetExplorer1.StatusText
使用MFC包装类的VC++程序代码如下:
BSTR bstrStatusText;
HRESULT hr = m_pInternetExplorer->get_StatusText(&bstrStatusText);
IWebBrowser2因为COM规则要求接口恒久不变, 要加入新的工呢高COM,你必须增加新的接口。 新的接口可扩展自其他接口已扩展功能。 举例,当心的需求引入WebBrowser 和Internet Explorer 接口, 开发者被要求建立一个新的接口: IWebBrowser2.
早期, IWebBrowser2 继承自 IWebBrowser 和 IWebBrowserApp, 还提供不包含在着两个接口中的功能. 所以你应当使用 IWebBrowser2 接口替代 来操纵WebBrowser 控件或者 Internet Explorer.
IWebBrowser2 接口有4个方法和8个属性.
方法 IWebBrowser2 接口方法如下描述,按照 vtable 次序, in Table 6-5.
也许IWebBrowser2 、接口踵使用最多的方法是ExecWB. 它通过WebBrowser实现了一个 IOleCommandTarget 接口的Exec的包装实现。 在 ExecWB 方法 被创建前, 你不可以直接从VB中调用IOleCommandTarget::Exec, 因为VB不可访问 IOleCommandTarget 接口 ,因而VB不可直接使用该接口的ExecWB方法。 IOleCommandTarget::Exec 方法过去大量使用,所以 WebBrowser 开发者决定创建ExecWB 以使事情变得容易。
Table 6-5. IWebBrowser2 Vtable 次序的方法
方法
描述
Navigate2
功能基于Navigate 方法,不同在于 Navigate2 允许你导航到飞URL表达的地方,例如Windows shell folder. (Windows shell folder 是指向标示符指针, 或者windows shell命名空间中的 PIDL,)
QueryStatusWB
IoleCommandTarget接口的QueryStatus方法在 WebBrowser.中的包装实现
ExecWB
IoleCommandTarget接口的Exec方法在 WebBrowser.中的包装实现
ShowBrowserBar
显示或者隐藏特定的浏览器条. 该方法仅仅用于InternetExplorer 对象
为什么你无论如何都要调用ExecWB方法?因为它提供了你需要的功能(通过IOleCommandTarget::Exec)不是暴露于webbrowser接口。你大概疑惑于为社么开发者不实现扩展属性和方法。记住:COM规则是一旦接口发表就不可改变。所以你不能够不能增加功能而不创建新的接口。
ExecWB 方法允许WebBrowser 开发者增加新的功能而不用创建新的接口。再之, 那是由WebBrowser 通过 ExecWB 代表性的暴露不常用的工的途径, 譬如调用 Save As 对话框或者缩放web页的字体。 ExecWB 工作的方法是传递一个你想调用的command ID 和必需的参数. 太多的 command IDs ,他们包含于OLECMDID 实现文档头文件he DocObj.h .
作为举例, 支持缩放web页的内容字体。Internet Explorer 允许你通过View菜单的Text Size子菜单改变字体的大小从最小到最大。 ExecWB 方法暴露了允许你改变显示在浏览器中的文字大小。对于Zoom 命令, 你可指定特殊值0, 1, 2, 3, or 4, 0 是最小字体 ,4是最大字体。以下举例为改变字体为最大(VB):
WebBrowser1.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, _
CLng(4), Null
再次代码中, 我调用 ExecWB 方法, 传递OLECMDID_ZOOM 常量给第一个参数. 此常量指定 zoom 操作将被执行。 第二个参数传递给ExecWB 不要提示用户。另外的选择, 你可以提醒用户而是用OLECMDEXECOPT_PROMPTUSER. (见 DocObj.h.)
第三个输入参数指示要设定的文字尺寸。我想是文字尽可能的大,所以我指定了4 。注意我在调用中使用了VB的Clng函数包装此值,转换我指定的此值为一个variant—输入需要的类型.最后为一个输出参数包含任何返回值。因为返回值不需要关心,我传递Null.
属性 IWebBrowser2 接口有8个属性。 (Table 6-6 按照vtable次序展示其)。他们都很直观,我仅仅解释恰宏很特别的一个—AddressBar.
Table 6-6. IWebBrowser2 Properties in Vtable Order
属性
描述
ReadyState
返回WebBrowser 的状态(换句话讲 ,该属性指示文档是否完成装载). 尽管你可以使用 ReadyState 属性, 使用 DocumentComplete 时间检测文档是否装载还是比较好些。 (那意味着所有HTML和文档被装载
Offline
.返回或者设置检测webbrowser是否处于脱机模式的变量
Silent
返回或设置 WebBrowser 是否处于沉默模式。如果处于沉默模式,意味着没有对话框可以被显示.
RegisterAsBrowser
.设置或者检测Webbrowser是否是作为顶层浏览器被登记
RegisterAsDropTarget
.设置或返回WebBrowser是否作为导航的拖放对象 。如果登记委托放对象,用户可直接拖放连接到浏览器
TheaterMode
返回或者设置Internet Explorer是否处于theater 或者 normal window 模式.。在theater 模式, Internet Explorer占据整个屏幕就像处于FullScreen 模式,但也有最小化的用户接口元素 (此属性仅仅展示于InternetExplorer 对象)
AddressBar
显示或者隐藏地址栏(此属性仅仅展示于InternetExplorer 对象)
Resizable
返回或者设置Internet Explorer是否可被调整大小, 你可利用此属性防止用户改变webbrowser的大小(此属性仅仅展示于InternetExplorer 对象)
AddressBar 属性允许你显示/隐藏Internet Explorer 地址栏—一个包含可输入URL的文本框 允许你导航到某个Url。 能够显示或者隐藏地址条允许你完全控制你的用户的导航体验
在你的企业网络或者中小学控制用户导航体验.在此环境下,你将控制用户的导航以至于可确定某些不恰当地页面不可访问。你可创建你自己的浏览器。但是如果你没有时间和资源这么做,你可以自动化IE来代替.自动化IE允许你管掉所有的用户界面允许用户导航到某个web页,像菜单条, 工具条,以地址栏. 之后你可建立一定数量的可访问web页连接列表给用户。
关掉这些用户接口很容易. VB代码:
InternetExplorer1.AddressBar = False
InternetExplorer1.ToolBar = False
InternetExplorer1.MenuBar = False