NavigationStarting在导航到新页面之前触发,此时网络请求还没有发送。
这个事件的主要作用为:审查即将跳转的 URL,必要时予以拦截。
e参数属性:
| 属性名 | 类型 | 说明 |
|---|---|---|
| Uri | String | 即将导航到的目标 URL(核心属性) |
| Cancel | Boolean | 设为True可取消本次导航(最常用) |
| IsUserInitiated | Boolean | 是否由用户主动操作触发(如点击链接、输入地址) |
| NavigationId | ULong | 本次导航的唯一ID(也就是框架ID,用于关联后续事件) |
| IsRedirected | Boolean | 是否是重定向导航 |
| NavigationKind | CoreWebView2NavigationKind | 导航类型,Reload为刷新,BackOrForward为后退或前进,NewDocument为新页面 |
| RequestHeaders | CoreWebView2HttpRequestHeaders | 包括所有请求头,可访问,不能修改 |
提示:请拷贝示例文件"CaseStudy\WebViewer\简单浏览器.Table",然后基于拷贝测试本节示例代码,避免被不相干的代码干扰。
示例一
可以建立一个黑名单,禁止用户访问黑名单中的域名,例如将NavigationStarting事件代码设置为:
Dim
blockedDomains
As
String()
= {"jd.com",
"taobao.com"}
'黑名单域名,这里用小写
For
Each
domain
As
String
In
blockedDomains
If
e.Uri.ToLower().Contains(domain)
Then
'判断是否是黑名单中的域名,注意url转为小写再判断
e.Cancel =
True
'如果是的,则取消访问
MessageBoxA.Show("禁止访问目标域名",
"提示",
MessageBoxButtons.OK, MessageBoxIcon.Warning)
'提示
End
If
Next
示例二
实现白名单的代码稍微复杂点,参考代码如下:
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
allowedDomains
As
String()
= {"163.com",
"sina.com"}
'白名单域名,这里用小写
Dim
inList
As
Boolean
=
False
'标记变量
Dim
uri
As
String
= e.Uri.ToLower()
'将uri转为小写,方便比较
If
uri.StartsWith("data:")
OrElse
uri.StartsWith("about:")
Then'如果是内部协议
Return
'允许访问
End
If
For
Each
domain
As
String
In
allowedDomains
If
e.Uri.ToLower().Contains(domain)
Then
'判断是否是白名单中的域名,注意url转为小写再判断
inList =
True
End
If
Next
If
Not
inList
Then
'如果不在白名单中
e.Cancel =
True
'取消访问
wv.CoreWebView2.NavigateToString("不能访问白名单之外的域名!")
'换个提示方式
End
If