WebBrowser控件的常用方法、屬性和事件
WebBrowser控件的常用方法:
Navigate(string urlString):瀏覽urlString表示的網(wǎng)址
Navigate(System.Uri url):瀏覽url表示的網(wǎng)址
Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders):
瀏覽urlString表示的網(wǎng)址,并發(fā)送postData中的消息
(通常我們登錄一個(gè)網(wǎng)站的時(shí)候就會把用戶名和密碼作為postData發(fā)送出去)
GoBack():后退
GoForward():前進(jìn)
Refresh():刷新
Stop():停止
GoHome():瀏覽主頁
WebBrowser控件的常用屬性:
Document:獲取當(dāng)前正在瀏覽的文檔
DocumentTitle:獲取當(dāng)前正在瀏覽的網(wǎng)頁標(biāo)題
StatusText:獲取當(dāng)前狀態(tài)欄的文本
Url:獲取當(dāng)前正在瀏覽的網(wǎng)址的Uri
ReadyState:獲取瀏覽的狀態(tài)
WebBrowser控件的常用事件:
DocumentTitleChanged,
CanGoBackChanged,
CanGoForwardChanged,
DocumentTitleChanged,
ProgressChanged,
ProgressChanged
這幾個(gè)意思很明顯,就不細(xì)說了。
Navigating,開始導(dǎo)航
Navigated,導(dǎo)航完成并開始裝載文檔
DocumentCompleted:按理應(yīng)該是整個(gè)文檔裝載完成,即網(wǎng)頁完全顯示完才發(fā)生,但事實(shí)上似乎不是,所以還是慎用這個(gè)事件。用ReadyState來判斷是否完全裝載完成更好。
這些方法、屬性、事件,對于實(shí)際瀏覽來說并不夠,因?yàn)槟阋芴幚韽棾鲂麓翱诘男畔?,就算是你要?qiáng)制所有的鏈接都在同一窗口內(nèi)打開,你也要知道使用者點(diǎn)了什么鏈接吧。但是WebBrowser竟然沒有提供這個(gè)事件,有一個(gè)NewWindow事件,在使用者點(diǎn)擊鏈接將要彈出新窗口時(shí)發(fā)生,但是這個(gè)事件沒有什么有用的參數(shù),你根本就不知道使用者要打開的是什么鏈接??梢奧ebBrowser的設(shè)計(jì)者很不負(fù)責(zé)。為了解決這個(gè)問題,必須借助ShDocVw.dll。工程--添加引用--COM--Microsoft Internet Controls--確定,就可以把ShDocVw.dll添加到工程中了,然后我們就可以這樣:
- //(假設(shè)wb是一個(gè)已經(jīng)存在的WebBrowser)
- wb.Navigate("about:blank");
- ((SHDocVw.DWebBrowserEvents_Event)wb.ActiveXInstance).NewWindow+=BrowserNewWindow;
DWebBrowserEvents_Event是一個(gè)接口,它提供了NewWindow事件,這個(gè)事件帶有詳細(xì)的參數(shù)。
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,還有一個(gè)DWebBrowserEvents2_Event接口,同樣可以實(shí)現(xiàn)上述功能,區(qū)別是后者適用于ie7以上的瀏覽器,當(dāng)然前者也可用于ie7,只是不能利用其新特性而已(如在新窗口中打開鏈接和在新標(biāo)簽中打開鏈接是兩個(gè)不同的事件(NewWindow2,NewWindow3))。
【編輯推薦】