简单浏览器

本节内容可以参考文件"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


本页地址:http://www.foxtable.com/webhelp/topics/6205.htm