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接口。你大概疑惑于為社么開發者不實現擴展屬性和方法。記?。篊OM規則是一旦接口發表就不可改變。所以你不能夠不能增加功能而不創建新的接口。
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 |