NavigationCompleted

NavigationCompleted在整个页面(包括所有资源,例如图片)都加载完成后执行,用于监听导航操作完成(成功/失败/取消)的状态,是处理页面加载后逻辑、错误捕获、导航结果判断的关键。

e参数属性:

属性名 类型 说明
IsSuccess Boolean 导航是否成功
WebErrorStatus CoreWebView2WebErrorStatus 导航失败时的错误状态码
NavigationId ULong 导航的唯一标识
HttpStatusCode Integer HTTP 导航的状态码(如200/404/500);非HTTP导航(如 file://)、导航未收到响应时为 0

NavigationCompleted事件和DOMContentLoaded事件一样,可以运行js代码,或注入css样式和js函数,或插入、删除、修改html元素,但这些操作更适合在DOMContentLoaded事件执行。

NavigationCompleted更多是在导航结束后做个"总结",例如如果导航成功,则将窗口标题设置为网页标题,如果导航失败,则提示具体的失败原因。

示例

提示:本示例中详细的错误处理代码只是为了演示如何捕获不同类型的错误。在实际开发中,WebViewer 和普通浏览器一样会自动提示大多数导航错误,通常无需手动处理。

NavigationCompleted事件代码:

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(
"""") '将窗口标题设置为网页标题
Else

   
If e.HttpStatusCode = 404 Then '404错误
        MessageBox.Show(
"错误:页面不存在(404", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
   
Else '其他错误
       
Select Case e.WebErrorStatus
           
' SSL证书相关错误
           
Case CoreWebView2WebErrorStatus.CertificateCommonNameIsIncorrect
                MessageBox.Show(
"错误:SSL证书通用名与网址不匹配", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.CertificateExpired
                MessageBox.Show(
"错误:SSL证书已过期", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.ClientCertificateContainsErrors
                MessageBox.Show(
"错误:SSL客户端证书包含错误", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.CertificateRevoked
                MessageBox.Show(
"错误:SSL证书已被吊销", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.CertificateIsInvalid
                MessageBox.Show(
"错误:SSL证书无效(如签名不被信任、密钥过弱等)", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
               
' 网络连接相关错误
           
Case CoreWebView2WebErrorStatus.ServerUnreachable
                MessageBox.Show(
"错误:目标服务器无法访问", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.Timeout
                MessageBox.Show(
"错误:网络连接超时,请检查网络", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.ConnectionAborted
                MessageBox.Show(
"错误:网络连接被中止(如页面调用window.stop()", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.ConnectionReset
                MessageBox.Show(
"错误:网络连接被重置", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.Disconnected
                MessageBox.Show(
"错误:互联网连接已断开", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.CannotConnect
                MessageBox.Show(
"错误:无法建立到目标服务器的连接", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.HostNameNotResolved
                MessageBox.Show(
"错误:域名解析失败(DNS错误)", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
               
' HTTP相关错误
           
Case CoreWebView2WebErrorStatus.ErrorHttpInvalidServerResponse
                MessageBox.Show(
"错误:服务器返回无效或无法识别的HTTP响应", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.RedirectFailed
                MessageBox.Show(
"错误:页面重定向失败", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.ValidAuthenticationCredentialsRequired
                MessageBox.Show(
"错误:需要有效的身份验证凭据(HTTP " & e.HttpStatusCode & "", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.ValidProxyAuthenticationRequired
                MessageBox.Show(
"错误:需要有效的代理身份验证凭据(HTTP " & e.HttpStatusCode & "", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
               
' 操作取消/未知错误
           
Case CoreWebView2WebErrorStatus.OperationCanceled
                MessageBox.Show(
"提示:导航已被取消(主动拦截/快速跳转)", "导航取消", MessageBoxButtons.OK, MessageBoxIcon.Information)
           
Case CoreWebView2WebErrorStatus.Unknown
                MessageBox.Show(
"错误:发生未知导航错误", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
           
Case CoreWebView2WebErrorStatus.UnexpectedError
                MessageBox.Show(
"错误:发生意外的导航错误", "导航失败", MessageBoxButtons.OK, MessageBoxIcon.Error)
               
' 兜底(防止枚举扩展
           
Case Else
                MessageBox.Show(
"导航失败:" & e.WebErrorStatus & "(错误码:" & CInt(e.WebErrorStatus) & "", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
       
End Select
   
End If
End
If


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