WebBrowser控件的常用方法、屬性和事件
WebBrowser控件的常用方法:
Navigate(string urlString):瀏覽urlString表示的網址
Navigate(System.Uri url):瀏覽url表示的網址
Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders):
瀏覽urlString表示的網址,并發送postData中的消息
(通常我們登錄一個網站的時候就會把用戶名和密碼作為postData發送出去)
GoBack():后退
GoForward():前進
Refresh():刷新
Stop():停止
GoHome():瀏覽主頁
WebBrowser控件的常用屬性:
Document:獲取當前正在瀏覽的文檔
DocumentTitle:獲取當前正在瀏覽的網頁標題
StatusText:獲取當前狀態欄的文本
Url:獲取當前正在瀏覽的網址的Uri
ReadyState:獲取瀏覽的狀態
WebBrowser控件的常用事件:
DocumentTitleChanged,
CanGoBackChanged,
CanGoForwardChanged,
DocumentTitleChanged,
ProgressChanged,
ProgressChanged
這幾個意思很明顯,就不細說了。
Navigating,開始導航
Navigated,導航完成并開始裝載文檔
DocumentCompleted:按理應該是整個文檔裝載完成,即網頁完全顯示完才發生,但事實上似乎不是,所以還是慎用這個事件。用ReadyState來判斷是否完全裝載完成更好。
這些方法、屬性、事件,對于實際瀏覽來說并不夠,因為你要能處理彈出新窗口的信息,就算是你要強制所有的鏈接都在同一窗口內打開,你也要知道使用者點了什么鏈接吧。但是WebBrowser竟然沒有提供這個事件,有一個NewWindow事件,在使用者點擊鏈接將要彈出新窗口時發生,但是這個事件沒有什么有用的參數,你根本就不知道使用者要打開的是什么鏈接。可見WebBrowser的設計者很不負責。為了解決這個問題,必須借助ShDocVw.dll。工程--添加引用--COM--Microsoft Internet Controls--確定,就可以把ShDocVw.dll添加到工程中了,然后我們就可以這樣:
- //(假設wb是一個已經存在的WebBrowser)
- wb.Navigate("about:blank");
- ((SHDocVw.DWebBrowserEvents_Event)wb.ActiveXInstance).NewWindow+=BrowserNewWindow;
DWebBrowserEvents_Event是一個接口,它提供了NewWindow事件,這個事件帶有詳細的參數。
BrowserNewWindow就是NewWindow事件的處理程序:
- void BrowserNewWindow(string url, int flag, string target, ref object data,
- string header, ref bool processed) {
- processed=true;
- wb.Navigate(url, null, (byte[])data, header);
- }
processed=true的目的是為了防止新窗口在ie中打開。
除了DWebBrowserEvents_Event,還有一個DWebBrowserEvents2_Event接口,同樣可以實現上述功能,區別是后者適用于ie7以上的瀏覽器,當然前者也可用于ie7,只是不能利用其新特性而已(如在新窗口中打開鏈接和在新標簽中打開鏈接是兩個不同的事件(NewWindow2,NewWindow3))。
【編輯推薦】