IWebBrowserApp
IWebBrowserApp
接口僅僅在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