我的 .NET MAUI 应用程序中的
WebView
控件遇到问题,其中 Navigated
事件在导航后不会触发。
场景如下:
WebView
的 Source 属性设置为有效的 URL。Navigated
事件。Navigated
事件处理程序。
4.Navigating
事件按预期触发我正在 Web 视图加载页面时实现活动指示器。触发导航事件时,活动指示器可见,但即使在加载页面后也不会熄灭,因为导航事件未触发。
环境:
.NET MAUI 项目面向 Android、iOS 和 Windows
Android 34.0、iOS 和 Windows 10.0.19041.0 平台版本
故障排除完成:
已验证导航事件是否已正确订阅。
确保 URL 有效并可通过常规浏览器访问。
确认的特定于平台的配置:
Android:AndroidManifest.xml 中存在 INTERNET 权限。
为什么未触发 Navigated 事件?如何解决此问题?任何见解或解决方案将不胜感激!
当您使用设置自定义 AndroidWebViewClient 时
platformView.SetWebViewClient(new AndroidWebViewClient(this));
它取代了默认的 WebView 客户端,后者负责触发 Naviged 事件。
您可以修改您的 AndroidWebViewClient 以在 onPageFinished 方法中显式触发 Navigated 事件。
private class AndroidWebViewClient : Android.Webkit.WebViewClient
{
private readonly WebViewConfigurationService service;
private readonly WebView webView;
public AndroidWebViewClient(WebViewConfigurationService service, WebView webView)
{
this.service = service;
this.webView = webView;
}
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
// Manually invoke the Navigated event
if (webView != null)
{
webView.Handler?.Invoke(nameof(WebView.Navigated), new WebNavigatedEventArgs(
WebNavigationEvent.NewPage,
new Uri(url),
null,
WebNavigationResult.Success));
}
}
}
在设置 webview 客户端时传递 Maui WebView
if (webView.Handler?.PlatformView is Android.Webkit.WebView platformView)
{
platformView.SetWebViewClient(new AndroidWebViewClient(this, webView));
}