WebView 导航事件未在 .NET MAUI 中触发

问题描述 投票:0回答:1

我的 .NET MAUI 应用程序中的

WebView
控件遇到问题,其中
Navigated
事件在导航后不会触发。

场景如下:

  1. WebView
    的 Source 属性设置为有效的 URL。
  2. 我已在 XAML 和 C# 中订阅了
    Navigated
    事件。
  3. 尽管如此,导航完成后不会调用
    Navigated
    事件处理程序。 4.
    Navigating
    事件按预期触发

我正在 Web 视图加载页面时实现活动指示器。触发导航事件时,活动指示器可见,但即使在加载页面后也不会熄灭,因为导航事件未触发。

环境:

.NET MAUI 项目面向 Android、iOS 和 Windows

Android 34.0、iOS 和 Windows 10.0.19041.0 平台版本

故障排除完成:

已验证导航事件是否已正确订阅。

确保 URL 有效并可通过常规浏览器访问。

确认的特定于平台的配置:

Android:AndroidManifest.xml 中存在 INTERNET 权限。

为什么未触发 Navigated 事件?如何解决此问题?任何见解或解决方案将不胜感激!

c# .net webview maui
1个回答
0
投票

当您使用设置自定义 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));
}
© www.soinside.com 2019 - 2024. All rights reserved.