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))。
【编辑推荐】