如何对webbrowser和IE编程(三)

_ IWebBrowserApp _

_ IWebBrowserApp _ 接口仅仅在IE中实现。 典型的,你使用 InternetExplorer 对象创建一个IE的实例. 然后你使用 IWebBrowserApp 接口操纵此实例. (今天采用 IWebBrowser2 替代) IWebBrowserApp 接口继承自 IWebBrowser , 所以它提供 IWebBrowser 的全部功能。

因为 _ IWebBrowserApp _ 呈现一个 IE窗口的实例, 所以它的方法和属性典型地允许你控制浏览器窗口的用户接口。 这些方法和属性并非包含在WebBrowser的 IWebBrowser 中的:寄宿control的应用程序提供诸如状态条, 工具条, 以及菜单条等用户接口. WebBrowser 控件仅仅用于装载web页以及其它类型文件。

_ IWebBrowserApp _ 有4个方法和10 各属性。

方法 _ IWebBrowserApp _ 接口的属性很直观立如下表 , 但是有2个有理由值的讨论: GetPropertyPutProperty . 此两个方法允许你在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 继承自 IWebBrowserIWebBrowserApp , __ 还提供不包含在着两个接口中的功能. 所以你应当使用 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。 能够显示或者隐藏地址条允许你完全控制你的用户的导航体验

在你的企业网络或者中小学控制用户导航体验 .在此环境下,你将控制用户的导航以至于可确定某些不恰当地页面不可访问。你可创建你自己的浏览器。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus