简单浏览器
本节内容可以参考文件"CaseStudy\WebViewer\简单浏览器.Table"。
本节的任务是设计一个简单的浏览器,接下来大量的示例代码都会基于这个浏览器进行测试。
浏览器窗口除了WebViewer控件外,还包括一个TextBox用于输入网址,以及四个按钮,分别是访问、后退、前进和刷新:

设计过程:
1、窗口的AfterLoad事件代码:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
utx
As
WinForm.TextBox = e.Form.Controls("txtUri")
utx.Text =
"https://www.example.com/"
'设置默认网址
Await
wv.EnsureCoreWebView2Async(Nothing)
'初始化浏览器
wv.CoreWebView2.Navigate(utx.Text)
'打开初始网址
2、用于输入网址的TextBox控件的KeyDown事件代码:
If
e.KeyCode = Keys.Enter
Then
'如果按下的是回车键
e.Form.Controls("btnGo").PerformClick()
'模拟单击访问按钮
e.Handled =
True
'取消默认操作
End
If
3、访问按钮代码:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
url
As
String
= e.Form.Controls("txtUri").Text
url = wv.ValidUrl(url)
'验证目标网址
If
url >
""
Then
'如果验证OK
Try
wv.CoreWebView2.Navigate(url)
'导航到目标网站
Catch
ex
As
Exception
MessageBox.Show(ex.Message,
"错误",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End
Try
End
If
4、后退按钮代码:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
If
wv.CoreWebView2.CanGoBack
Then
'如果可以后退
wv.CoreWebView2.GoBack()
'则后退
End
If
5、前进按钮代码:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
If
wv.CoreWebView2.CanGoForward
Then
'如果可以前进
wv.CoreWebView2.GoForward()
'则前进
End
If
6、刷新按钮代码:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
wv.CoreWebView2.Reload()
'刷新
7、为了动态刷新后退和前进按钮的状态,可以在WebViewer控件的HistoryChanged事件加上代码:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
e.Form.Controls("btnForward").Enabled
= wv.CoreWebView2.CanGoForward
e.Form.Controls("btnBack").Enabled =
wv.CoreWebView2.CanGoBack
8、在WebViewer单击链接,如果链接的目标是
_blank,则会打开一个新的系统浏览器窗口显示,而不是显示在的WebViewer中,为解决这个问题,可以在WebViewer的NewWindowRequested事件中加上代码:
If
e.IsUserInitiated
Then
'如果是用户点击链接
e.Handled =
True
'取消打开新窗口
e.Sender.WebViewer.CoreWebView2.Navigate(e.Uri)
'用当前的WebViewer显示目标网页
Else
'如果是自动弹窗
e.Handled =
True
'禁止自动弹窗
End
If
9、在SourceChanged事件中设置如下代码,用于刷新地址栏:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
e.Form.Controls("txtUri").Text
= wv.CoreWebView2.Source
10、在NavigationCompleted事件设置如下代码,用于刷新窗口标题:
'''Async
Dim
wv
As
WebViewer = e.Sender.WebViewer
If
e.IsSuccess
Then
Dim
pageTitle
As
String
=
Await
wv.CoreWebView2.ExecuteScriptAsync("document.title")
'获得网页标题
e.Form.Text = pageTitle.Trim("""")
'将窗口标题设置为网页标题
End
If