ie編程
① 如何對webbrowser和IE編程
解決方案1:
請注意webbrowser control位於第二級中。
MSHTML
早期的mshtml具有讀取顯示html的功能,plug-in都是按照ie activex規范寫的.GoForward '/. Navigate 帶有5個參數,第4個DWebBrowserEvents2介面暴露事件
ie4 之前,webbrowser control裝載windows word,但是卻可以作為其他控制項的容器(如圖中所示的). 舉例來講。針對不同的文檔,你可以將activex控制項置於html中,對於html文檔。
IWebBrowser
IWebBrowser 僅僅是WebBrowser control的最初介面,並且不發送HTTP pragma,決定加入第三個介面IWebBrowser2擴展webbrowser的功能,僅有IwebBrowser和IwebBrowserApp兩個介面.Navigate允許你導航到特定的你所想的web頁或者文件,提供瀏覽能力給上層宿主,也可以是vc或者任何其他語言的應用程序。
Webbrowser control既是activex control也是activex document 的宿主,。MSHTML實際上是一個active 文檔伺服器,但是沒有提供存取歷史列表的途徑:nocache 到伺服器.
REFRESH_IFEXPIRED 僅僅當頁面失效時才發送刷新請求
REFRESH_CONTINUE 內部使用、
WebBrowser Control 與 Internet Explorer
二者又太多的共同點.GoBack ' /, Navigate is 卻是最重要的方法。 作為其他派生介面的基礎介面. 你可與直接通過屬性LocationUR來獲取當前頁的URL,此時mshtml就是一個activex宿主,當控制WebBrowser control或者自動化操作 Internet Explorer.doc文檔,它針對特殊的類型.dll來使用webbrowser control的,你都是通過COM介面來訪問其功能; Automating Internet Explorer object
盡管 GoBack 和 GoForward 方法十分重要,必須建立名為 InternetExplorer的對象。
二。
介面
webbrowser有4個介面(如圖),僅僅是調用webbrowser control即可,vc等語言中使用名為class ID CLSID_InternetExplorer的介面類,控制webbrowser control (就像控制其他任何activex com 控制項一樣);/, 允許你指定特定的URL以實現導航以及其他定義導航行為的信息。該介面派生於第二個介面。如果你想顯示一個。應用程序必須是可容納activex控制項的容器;GoForward()。
方法
描述
GoBack
導航到歷史列表中的上一個頁面
GoForward
導航到歷史歷表中的下一個項目
GoHome
導航到預設頁面,有8個方法和30個屬性; Hosting WebBrowser control
m_pInternetExplorer->,但是並不提供IE窗口的呈現功能,其中3個提供全部的功能,不要在編程時使用
REFRESH_COMPLETELY 發送HTTP pragma,webbrowser裝載名為mshtml的組件(如圖所示),調用特殊類型注冊的文檔server以顯示文檔.GoBack()。作為控制項,shdocvw還是提供了簡單創建web 應用程序的能力,各種插件—別意外,還可以控制其他的控制項如vbscript 腳本引擎和javascript腳本引擎,當開發ie4時候:
m_webBrowser,使用的是webbrowser對象; Automating Internet Explorer object
VC++中如下.dll包含了webbrowser control ; Hosting WebBrowser control
InternetExplorer1。我們看到最上層是WebBrowser的宿主(Host),可以是vb程序,也就是任何你想重用(ReUse)webbrowser control的應用程序:
WebBrowser1。甚至IE也不直接而是通過shdocw。
Shdocvw
Shdocvw。記得嗎, 在VB中你可以如下調用,你不需要開發不同的應用。當調用webbrowser控制項時.你可以使用WebBrowser control 或者 Internet Explorer對象.
GoSearch
導航到預設搜索頁面
Navigate
導航到一個頁面或者頁面
Refresh
刷新當前頁面
Refresh2
可以選擇刷新級別:nocache header 到伺服器
Stop
停止當前導航
盡管WebBrowser control 提供了你需要的導航回退以及前向的方法.
在VB或者VC++中調用GoBack 和 GoForward 方法式很容易的:
REFRESH_NORMAL 普通刷新,如下,作為文檔容器, 提供基本的例如導航web頁面的功能。之後章節會講到如何將ie的高級特性加入到你的應用程序,且二者共享相同的功能; /。盡管shdocvw提供了大部分的瀏覽功能,在vc中是使用class ID CLSID_WebBrowser的介面類,geszhong,java applet 。盡管如此。
當自動化ie時,因為IE本身就是COM技術的典型應用,必須有COM的基礎知識IE的體系
② 如何對webbrowser和IE編程
navNoReadFromCache. 當前未實現. navNoWriteToCache. 當前未實現. navAllowAutoSearch. 如果指定的URL未找到,自動搜索功能將試圖導航到通常的頂級域名如.com .net .org以找到正確的URL。如果失敗, URL將傳遞給搜索引擎. navBrowserBar. 如果可能,將 URL 裝入到 Explorer 的地址欄Bar。
第三個參數 TargetFrameName. 指定web頁的哪一個frame將會發生導航. (參數的類型是指向 VARIANT的指針)此字元串將為以存在於web頁中的名字或者一個指定的值如 _top 或 _search. _top 值指定 URL 將被當前最頂層
web頁裝入並不在任何一個當前頁中存在的frame. _search 指示搜索麵板將被打開. (該值僅在你自動化操控Internet Explorer時發生.) 如果你指定的frame名稱並未發現,, 新的Internet Explorer 窗口將被打開。 你可以使用 PostData 參數 (第四個)通過HTTPpost事務將指定特定的數據發送到伺服器. (參數的類型是指向 VARIANT的指針) Post 處理用於將在HTML表單收集的數據發送到伺服器。如果此參數不指定任何數據 , Navigate 方法將
使用Get方法. 另外,如果你不指定 HTTP 協議的URL (換句話講,如果你指定例如 FILE 協議的 URL), PostData 參數將被忽略。 你也可以使用第五個參數, Headers, 以發送HTTP 頭信息到伺服器. (T參數的類型是指向 VARIANT的指針) 這些加入的頭信息將被 WebBrowser 控制項如常發送出去. 作為 PostData 參數, 如果你並不指定第一個參數, Headers 將被忽略. (二) 調用 Navigate 方法比GoBack 以及 GoForward 要困難,但如果你正僅僅導航到URL 且並不傳遞任何附加參數, 它的調用很容易。 舉例來說, VB中導航到 Microsoft 主頁, 可如下: WebBrowser1.Navigate "http://www.microsoft.com" VB代碼調用Navigate 如此容易因為所有參數出第一個參數外都可以是可選. 如此相對照,VC++不可以省略任何參數. 如果你想使用VC++不是勇任何特別的參數導航到 Microsoft的 home page, 你必須傳遞空的VARIANT 結構。 MFC 應用程序,你必須如下調用 Navigate COleVariant vtEmpty; m_webBrowser.Navigate(_T("http://www.microsoft.com"), &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty); 該例子展示了在MFC應用程序中控制WebBrowser控制項. 我傳遞一個普通的字元串而替代 BSTR 因為 MFC 提供了一個 WebBrowser 控制項的包裝類,第一個載包裝類中是LPCTSTR, 一個普通的字元串. 其他參數為指向 VARIANT 結構的指針。 如果你不想指定任何特別的參數, 別僅僅傳遞 NULL —那樣做, 你的應用程序會招來崩潰。你必須傳遞一個空的VARIANT 結構的指針. 前面的代碼使用
了 COleVariant 類, 那是一個與 CComVariant 類相似的類。 COleVariant 簡單包裝了 VARIANT 使得VARIANT 結構易於使用. 屬性 現在你看到了所有的 IwebBrowser 的方法,你大概向了解其屬性。(我是不是太苛求了?) IWebBrowser 介面有30個屬性,描述於表6-2. 我一已按照IWebBrowser 的Vtable中的字母序列出。 Table 6-2. IWebBrowser 屬性按照vtable排序 屬性 描述 Application 返回宿主WebBrowser 控制項的自動化對象 (IDispatch) 實現,如果對象不可用,則返回的WebbOrwser控制項的自動化對象 Parent 返回WebBrowser控制項的父控制項的自動化實現 (IDispatch) ,通常是容器—舉例來講,,您的宿主或者Internet Explorer 窗口。 Container 返回WebBrowser控制項容器的自動化對象 (IDispatch) 。通常,該值返回同 Parent 屬性一樣的值。. Document 返回活動文檔的自動化實現 (IDispatch) 。如果 HTML 當前顯示在WebBrowser, Document 屬性給出你存取 DHTML 對象模型的途徑. TopLevelContainer 返回一個布爾值指示IE是否是WebBRowser控制項的頂級容器。在 words中,如果IE是宿主應用承需則返回true Type 返回已經在WebBrowser中裝載的對象的類型。舉例,如果HTML document被裝載, Type 將返回 Microsoft HTML Document 5.0. 如果文檔是Word 文檔, Type 返回 Microsoft Word Document. Left .返回或設置控制項在容器窗口左邊距 Top .返回或設置控制項在容器窗口頂部邊距 Width 返回或設置webbrowser控制項在窗口中的水平方向的向蘇為單位寬度 Height 返回或設置webbrowser控制項在窗口中的處置方向的向像素為單位高度 LocationName 返回一個WebBrowser當前顯示的資源名稱的字元串 (換句話講, HTML 頁, Word 文檔,,folder, 諸如此類) 。 如果資源是 HTML 頁,字元串是標題。如果資源是文件或者文件夾,字元串為文件名或者文件夾名。—舉例, foo.doc (Word文檔)或者 Temp (temp directory.) LocationURL 返回WebBrowser正在顯示的資源的URL Busy 返回一個布爾值指示WebBrowser 當前是否正在裝入 URL.。如果
當前屬性返回 true, 你可以使用 Stop 方法取消代掉導航。
看完表 6-2, 清晰展示了你可使用的屬性. 當中的一些可能需要更多的解釋. IWebBrowser 使用的相當多的一個屬性是 LocationURL, 給出了當前你裝入WebBrowser窗口的 URL。 獲取 LocationURL 值在VB中相當容易: Dim strLocation strLocation = WebBrowser1.LocationURL
Visual C++的MFC應用, MFC 包裝類使的訪問LocationURL 很容易. 你簡單調用 GetLocationURL 方法,該方法返回一個 CString 對象. 當你想在自動化IE中或者
webBrowser的MFC應用中訪問 LocationURL when automating Internet
Explorer or when hosting the WebBrowser control in a C++ application that's not built by using MFC, 你必須調用攜帶一指向BSTR的指針。 BSTR 將包含返回值. 此處展示如何在 C++中使用: BSTR bstrURL; m_pInternetExplorer->get_LocationURL(&bstrURL); 存取 Document 屬性在VB中相當容易,當定義一個變數後(舉例, HtmlDoc), 值需要 set 為 Document 屬性: Set HtmlDoc = WebBrowser1.Document MFC 中也很容易,使用 MFC 包裝類的GetDocument方法: IDispatch* pDisp; pDisp = m_webBrowser.GetDocument();
GetDocument 返回指向代表文檔 IDispatch 介面的指針. 如果 GetDocument 失敗, 該對象將為NULL. 非MFC C++ 應用或者任何自動化IE
的C++ 應用訪問Document 屬性就只能夠採用調用COM的方法—通過屬性的get_方法. (注藝屬性實只讀,所以這里無put_ 方法.) 當調用 Document 的get_ 方法,你傳遞一個接受 IDispatch 的指針.此處展示了如何調用: IDispatch* pDisp; HRESULT hr = m_pInternetExplorer->get_Document(&pDisp); 當使用這些代碼,你可以使用 SUCCEEDED 宏( Win32 API的一部分), 以監測調用是否成功。在嘗試使用Idispatch介面前你應當確信調用成功。
(三) 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);
③ 如何對webbrowser和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和IE編程
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
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
⑤ 如何對webbrowser和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的高級特性加入到你的應用程序。
http://blog.csdn.net/shanhe/article/details/397373
http://wenku..com/link?url=IU7F4Jks8bX2ROAO_QdckFG5_Nmr4bUUCnRVW
⑥ 如何對webbrowser和IE編程
每次 Internet Explorer需要向客戶提供關於當前活動狀態的信息, Internet Explorer 激發通過DWebBrowserEvents2 連接點激發一個事件. (之前到版本 4, Internet Explorer 通過 DWebBrowserEvents 介面激發事件.但到了版本4.x和5, Internet Explorer 通過 DWebBrowserEvents2 連接點.)注意如何領會到Internet Explorer加法那些事件?最佳途徑是MSDN Online Web Workshop. 另外採用 OLE-COM Object Viewer 不像WebBrowser 控制項 和 Internet Explorer的其他介面,是劍介面沒有繼承體系. DWebBrowserEvents 介面嚴格應用於Internet Explorer 3. 如果你正宿主WebBrowser 控制項或者自動化Internet Explorer 5, 你可以通過此介面接收事件—但是不可掛接. DWebBrowserEvents2 介麵包含的方法是為Internet Explorer 5定製的.用 DWebBrowserEvents2 替代DWebBrowserEvents ,你將有更多的控制能力. 所以不要忘記介面的最後面的2.盡管DWebBrowserEvents2 是一個事件介面, 它其實就是像IWebBrowser2 一樣的另外 COM 介面,所以它可以包含方法. (D 開頭的命名是表示這是派遣介面.一個派遣介面是一個IDispatch 介面.但不同於普通介面, 派遣介面沒有vtable.) 就像一個介面一樣,派遣介面只不過提供一些函數的定義—他們並不真實實現.事件的實現由客戶提供.舉例來說,為了讓WebBrowser 激發一個事件, 在DWebBrowserEvents2 介面中適當定義一些方法.這些方法由客戶實現.但WebBrowser不直接調用這些方法.換句話講, WebBrowser 並不調用DocumentComplete 方法.因為 DWebBrowserEvents2 是派遣介面, WebBrowser 通過IDispatch::Invoke調用客戶的實現. 早期, 當WebBrowser 調用客戶的Invoke 實現, WebBrowser 傳遞事件被激發的DISPID.注意某些工具如Visual Basic, MFC, 和 ATL 提供Invoke實現表7-6 列出 WebBrowser 事件. (這些是WebBrowser 控制項和Internet Explorer供有的事件,盡管有些事件僅僅用於自動化Internet Explorer).注意盡管有些方法為不包含2.盡管DWebBrowserEvents2 並非繼承自WebBrowserEvents, DWebBrowserEvents2 還是匹配DWebBrowserEvents中被更改的,以免混淆。注意表 7-6 重的參數有些值同樣有 VARIANT_ TRUE 或VARIANT_FALSE. 如果你使用Visual C++,確信分派使用這些值不要使用 TRUE 或FALSE. 如果你使用Visual Basic, 它會自動幫助你轉換,你可以比較True和False.現在來仔細看看這些事件Table 7-6WebBrowser 事件私有事件描述BeforeNavigate2 在導航之前發生. (該事件並不在不刷新頁面的時候發生)CommandStateChange 當命令狀態改變時發生.該事件告訴你何時使能或者禁止 Back 以及Forward 菜單像或者按鈕.DocumentComplete 當整個文檔完全完成裝載時發生.如果你刷新頁面, 此事件並不激發.DownloadBegin 當一個下載項目開始時候發生,此事件也在你刷新(IWebBrowser2::Refresh.)時發生DownloadComplete黨整個下載項目完成是發生該事件也發生在完成刷新頁面.NavigateComplete2 當整個導航完成. 該事件對應於BeforeNavigate2.NewWindow2 在一個新的窗口被創建以顯示Web頁或者其他資源的時候發生。譬如你在頁面中以新建窗口的方式打開一個連接OnFullScreen 當FullScreen屬性被改變時候發生.此事件攜帶一個VARIANT_ BOOL類型的輸入參數指示Internet Explorer 是否處於全屏(full-screen)模式 (VARIANT_TRUE) 或者處於普通模式(VARIANT_FALSE).OnMenuBar 菜單條MenuBar屬性被改變的時候發生. 一個VARIANT_ BOOL類型的輸入參數指 Internet Explorer的菜單條屬性是可見(VARIANT_TRUE) 或者隱藏 (VARIANT_ FALSE).OnQuit 當Internet Explorer正在退出時發生. 該事件當用戶關閉瀏覽器或者調用Quit方法.OnStatusBar 當StatusBar屬性被改變的時候發生。事件攜帶VARIANT_ BOOL類型的輸入參數指示Internet Explorer的狀態條是否可見 (VARIANT_TRUE) 或者隱藏 (VARIANT_FALSE).OnTheaterMode 當TheaterMode屬性被改變時發生. 事件攜帶VARIANT_ BOOL類型的輸入參數指示Internet Explorer的狀態條是否可見 (VARIANT_TRUE) 或者隱藏 (VARIANT_FALSE).OnToolBar 當ToolBar屬性被改變時發生. 事件攜帶VARIANT_ BOOL類型的輸入參數指示Internet Explorer的狀態條是否可見 (VARIANT_TRUE) 或者隱藏 (VARIANT_FALSE).OnVisible 當WebBrowser將被顯示或者隱藏時發生。. 事件攜帶VARIANT_ BOOL類型的輸入參數指示Internet Explorer的狀態條是否可見 (VARIANT_TRUE) 或者隱藏 (VARIANT_FALSE).ProgressChange 當下載進度被更新時候發生PropertyChange 當屬性改變時候發生。典型的, 當PutProperty方法被調用時StatusTextChange Internet Explorer 和 WebBrowser 控制項改變狀態條時候發生。即使webbrowser控制項沒有狀態條。StatusTextChange給客戶一個改變狀態條的機會TitleChange .當文檔對象的title可用或者改變的時候發生 就像字面上所說. 當Internet Explorer 導航到一個WEB頁是激發; 因此, 當用戶輸入一個 URL, 點擊 Back 或者 Forward 按鈕, 或者處理一個導航時都會發生. BeforeNavigate2 也在WebBrowser 控制項導航類方法調用時發生, 例如 Navigate, Navigate2, GoHome, 或者 GoSearch. 也許, 該事件不會在你刷新頁面時發生. 如果頁面上有幀, BeforeNavigate2 將像頂級窗口一樣被激發. BeforeNavigate2 由7個輸入參數, 見7-7.Table 7-7Input Parameters of the BeforeNavigate2 將發生導航的頂級窗口或者幀的Idispatch介面的地址URL 將導航至的URL Flags 保留TargetFrameName 顯示資源的窗口或者幀的名字字元串,或者為NULL(如果沒有命名)PostData HTTP POST 傳輸的數據地址Headers增加的將要發給伺服器的 HTTP 頭. 一般HTTP頭指定其它的伺服器要求。傳送給伺服器的數據類型、狀態馬等Cancel cancel 標志的地址. 設置為TRUE可取消導航注意打所屬參數匹配於Navigate 或者Navigate2的調用參數.如果 BeforeNavigate2 由一個或者多個導航類調用激發,這些導航類的方法參數 傳遞到BeforeNavigate2 方法.在事件的句柄函數中, 你可以使用Cancel 參數取消導航, 或者你可以是用pDisp 參數修改導航目的.設置Cancel 參數為 VARIANT_TRUE 可以取消導航,如果你想,你可以通過pDisp修改參數導航信息且導航到另外的位置.舉例來說,如果我們向停止當前導航, 增加一些頭信息,且導航到原先的URL.在Visual Basic, 我們可以如下代碼實現:Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, _ URL As Variant, _ Flags As Variant, _ TargetFrameName As Variant, _ PostData As Variant, _ Headers As Variant, _ Cancel As Boolean) If TypeName(pDisp) = "WebBrowser" And Headers = "" Then pDisp.Stop pDisp.Navigate URL, Flags, TargetFrameName, PostData, _ Headers + "MyHeaders" Cancel = True End IfEnd Sub我們需要注意以上代碼的幾個重點.首先你必須檢查pDisp 的類型使之確定為WebBrowser. 當頁麵包含幀, pDisp 可能不是 WebBrowser 對象由此一些導航會導致錯誤.其次你必須檢查確信Headers 參數是空字元串以避免無限循環.記住BeforeNavigate2 每一次導航都會發生.因此如果你在BeforeNavigate2事件處理中調用Navigate, 另外一次 BeforeNavigate2 將被激活. 在前面的代碼中, 僅僅在Headers 參數為空才調用Navigate 避免了無限循環. 如果Headers 參數是空, Navigate 將攜帶非空的 Headers 參數. 下一次BeforeNavigate2 北激活, Headers 將不為空; 此時,我們千萬不可再次Navigate a,從而導致一個無限循環.第三點你必須調用pDisp 的Stop 方法.如果你沒做到這點,"about:NavigationCanceled" Web 頁將會載你首次取消掉導航時被顯示. 是當Internet Explorer 想通知一個應用程序WebBrowser 命令狀態已經改變時激發.當檢測到Forward和Back 菜單項和按鈕禁止或者使能時激發此事件.CommandStateChange 事件有2個參數, Command 和Enable。Command 輸入參數將要改變狀態的按鈕的表示符,可以取值—CSC_NAVIGATEFORWARD 和CSC_NAVIGATEBACK分別表示是Forward按鈕項和Back項,每次導航發生, CommandStateChange 事件發生並告訴你Forward 或者 Back 菜單項以及按鈕將使能或禁止. 舉例來說, 如果沒有Web頁在當前導航後發生, Command 的值應該為 CSC_NAVIGATEFORWARD, 並且Enable 參數將等於VARIANT_FALSE.第二個參數, Enable,如果命令可用(使能) 則為VARIANT_TRUE,如果禁止則值為VARIANT_FALSE. 為說明問題,我們看看代碼。
⑦ 如何對webbrowser和IE編程
最佳途徑是MSDN Online Web Workshop.
另外採用 OLE-COM Object Viewer,不像WebBrowser 控制項 和 Internet Explorer的其他介面,是劍介面沒有繼承體系.DWebBrowserEvents 介面嚴格應用於Internet Explorer .
如果你正宿主WebBrowser 控制項或者自動化Internet Explorer 5, 你可以通過此介面接收事件—但是不可掛接. DWebBrowserEvents2
介麵包含的方法是為Internet Explorer 5定製的.用 DWebBrowserEvents2 替代DWebBrowserEvents。
