版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
WebBrowser控件类似于IE浏览器的文档界面(事实上IE也是使用的这个控件),它提供了显示网页及支持浏览器的其他文档的容器,同时还提供了浏览器相关的属性、方法和事件,通过它可以很方便地制作一个简易的浏览器,访问并显示网页。
WebBrowser常用属性:
- AllowNavigation:加载第一个网页后是否还可以导航到其他页。注意:如果设置为False,那么不管是用Url属性还是Navigate方法或者直接点击网页内的链接,都不能使WebBrowser导航到别的页面。
- AllowWebBrowserDrop:是否导航到拖放到它上面的文档。
- CanGoBack:指示导航历史记录中的上一页是否可用,如果可用,GoBack方法才能成功。
- CanGoForward:指示导航历史记录中的下一页是否可用,如果可用,GoForward方法才能成功。
- ContextMenuStrip:关联一个快捷菜单,这是一个ContextMenuStrip类型。
- IsWebBrowserContextMenuEnabled:是否启用IE快捷菜单。注意:如果设置了ContextMenuStrip对应的快捷菜单,不论IsWebBrowserContextMenuEnabled设置为True还是False,都会显示自定义的快捷菜单。
- Document:表示当前网页,这是一个 HtmlDocument类。它。
- DocumentStream:包含网页的内容的流。如果当前未加载网页,则为Nothing。
- DocumentText:网页的 HTML 内容。如果当前未加载网页,则为空字符串。
- DocumentTitle:文档的标题。
- DocumentType:文档的 Multipurpose Internet Mail Extensions (MIME) 类型。
- ReadyState:当前状态。
- ScriptErrorsSuppressed:是否显示脚本错误消息的对话框。设置为True则不显示对话框,否则显示对话框。
- Url:当前文档的URL。
- WebBrowserShortcutsEnabled:指示是否启用IE上键盘快捷键。设置为True则启用,否则不启用。
- StatusText:包括鼠标指针悬停其上时超链接的URL、当前加载的文档的URL等的状态信息。
- ObjectForScripting:网页脚本代码可以用来与应用程序进行通信的对象。
WebBrowser常用方法:
- Navigate:将指定的统一资源定位器 (URL) 处的文档加载到 WebBrowser 控件中,替换上一个文档。
- GoBack:导航到上一页。
- GoForward:导航到下一页。
- GoHome:导航到当前用户的主页。
- GoSearch:导航到当前用户的默认搜索页。
- Print:使用当前打印和页面设置打印当前显示的文档。
- ShowPageSetupDialog:打开IE浏览器的页面设置对话框。
- ShowPrintDialog:打开IE浏览器的“打印”对话框,但不设置页眉或页脚值。
- ShowPrintPreviewDialog:打开IE浏览器的“打印预览”对话框。
- ShowPropertiesDialog:打开IE浏览器“属性”对话框。
- ShowSaveAsDialog:打开IE浏览器的“保存网页”对话框,如果承载的文档不是HTML页,则打开其“保存”对话框。
WebBrowser常用事件:
- DocumentCompleted:当网页或文档载入完成时引发此事件,但是需要注意的是,很多网页有多个页面,会引发多次此事件。
- EncryptionLevelChanged:导航到或离开使用了加密的网站时发生。
- FileDownload:下载文件时发生。
- Navigated:导航到新文档并开始加载该文档时发生。
- Navigating:导航到新文档之前发生。它的参数e是一个WebBrowserNavigatingEventArgs类,通过设置e.Cancel=True可以取消对网页的访问。
- NewWindow:打开新窗口之前发生。
- StatusTextChanged:当StatusText属性值更改时发生。
23.1.1 制作一个简易浏览器
WebBrowser控件提供了Navigate、GoHome、GoBack、GoForward等方法,通过这些方法,很容易完成一个简易的浏览器。
【例 23.1】【项目:code23-001】简易网页浏览器。
//打开网址
private void btnNavigate_Click(object sender, EventArgs e)
{
WebBrowser1.Navigate(TextBox1.Text);
//或者:
//WebBrowser1.Url = New Uri(TextBox1.Text);
}
//后退
private void btnGoBack_Click(object sender, EventArgs e)
{
if (WebBrowser1.CanGoBack)
WebBrowser1.GoBack();
}
//前进
private void btnGoForward_Click(object sender, EventArgs e)
{
if (WebBrowser1.CanGoForward)
WebBrowser1.GoForward();
}
//打印预览
private void btnPrintPreview_Click(object sender, EventArgs e)
{
WebBrowser1.ShowPrintPreviewDialog();
}
//网页另存为
private void btnSaveAs_Click(object sender, EventArgs e)
{
WebBrowser1.ShowSaveAsDialog();
}
//载入网页完毕
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
tsslStatus.Text = "载入完毕:" + e.Url.ToString();
}
//开始导航
private void WebBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
//阻止访问网址
if( e.Url.ToString() == "http://www.google.com/" )
{
e.Cancel = true;
tsslStatus.Text = "阻止载入:" + e.Url.ToString();
}
}
运行结果如下图所示:
图23-1 使用WebBrowser控件浏览网页
从图23-1可以看出,这个简易浏览器成功地将qq网页打开了。但是,点击页面上的链接,却不能打开相应的网页。造成这个问题的原因是,网页中链接的target属性设置为了_blank,也就是需要在新窗口中打开被链接的页面。
这个问题的解决方法请参看第23.3.3节。
注意:自制浏览器如果不希望使用者调用到类似IE中的右键菜单,应该设置IsWebBrowserContextMenuEnabled属性为false;如果不希望使用IE中的快捷键,应该设置WebBrowserShortcutsEnabled属性为false;如果希望限制用户停留在指定页面,应该设置AllowNavigation属性和AllowWebBrowserDrop属性为false。
23.1.2 获得网页源代码
大多数浏览器都提供了查看网页代码的功能,WebBrowser也提供了DocumentText属性来获得网页代码。
【例 23.2】【项目:code23-002】获得网页源代码。
//显示网页源代码
private void btnGetSourceCode_Click(object sender, EventArgs e)
{
txtSourceCode.Text = WebBrowser1.DocumentText;
}
运行结果如下图所示:
图23-2 显示网页源代码
一般情况下使用DocumentText即可获得正确结果,但是如果网页的charset设置不是Utf-8的话,获得的代码就会显示为乱码。可见单靠DocumentText是不能正确识别中文网页的。但可以通过DocumentStream属性来获得正确的网页源代码。
修改后的代码如下:
private void btnGetSourceCode_Click(object sender, EventArgs e)
{
MemoryStream ms = new MemoryStream();
ms = (MemoryStream)WebBrowser1.DocumentStream;
//注意:使用的编码需要根据网页而定
StreamReader sr = new StreamReader(ms, System.Text.Encoding.GetEncoding("utf-8"));
txtSourceCode.Text = sr.ReadToEnd();
sr.Close();
ms.Close();
}
再次运行,显示正确结果:
图23-3 显示网页源代码
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录