You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MauiWebChromeClient的OnProgressChanged方法未触发问题求助

解决WebView加载进度不触发的问题

问题根源

  1. 客户端设置时机太晚:你在Navigating事件里才给WebView绑定自定义WebChromeClient,此时页面已经开始导航,初始加载进度的触发时机已经错过;且每次导航都会重复追加Handler映射,属于冗余操作。
  2. 映射配置位置错误:AppendToMapping这类初始化配置逻辑不应该放在导航事件中,应该在WebView初始化前完成,且只执行一次。

修复方案

1. 调整Handler配置位置

修改MainPage.xaml.cs,将Handler映射代码移到页面构造函数中,确保WebView一初始化就绑定自定义客户端:

namespace MauiApp2 
{
    public partial class MainPage : ContentPage
    {
        int count = 0;

        public MainPage()
        {
            InitializeComponent();
#if ANDROID
            // 仅在页面初始化时配置一次,避免重复执行
            Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping("Custom", (handler, view) =>
            {
                handler.PlatformView.Settings.CacheMode = Android.Webkit.CacheModes.Default;
                handler.PlatformView.Settings.SetAppCacheEnabled(true);
                handler.PlatformView.Settings.JavaScriptEnabled = true;
                // 提前绑定自定义WebChromeClient
                handler.PlatformView.SetWebChromeClient(new CustomWebViewClient(handler));
            });  
#endif
        }

        // 若Navigating事件无其他业务逻辑可直接移除,有需求则保留
        void mywebview_Navigating(System.Object sender, Microsoft.Maui.Controls.WebNavigatingEventArgs e)
        {
            // 这里可放置导航开始时的其他逻辑,如显示加载提示
        }
    } 
}

2. 完善自定义WebChromeClient

在CustomWebViewClient的OnProgressChanged方法中调用基类方法,避免破坏Maui原生WebView逻辑:

using Android.App;
using Android.Webkit;
using Microsoft.Maui.Handlers;
using WebView = Android.Webkit.WebView;

namespace MauiApp2.Platforms.Android
{
    public class CustomWebViewClient : MauiWebChromeClient
    {
        private readonly Activity context;

        public CustomWebViewClient(IWebViewHandler handler) : base(handler)
        {
            context = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
        }

        public override void OnProgressChanged(WebView view, int newProgress)
        {
            // 调用基类方法,保留原生WebView行为
            base.OnProgressChanged(view, newProgress);
            // 正常输出加载进度
            Console.WriteLine($"加载进度:{newProgress}%");
        }
    }
}

3. 验证XAML配置

确保WebView的命名和事件绑定正确:

<WebView x:Name="mywebview" Navigating="mywebview_Navigating" Source="https://example.com" />

关键说明

  • 提前在构造函数配置Handler,能让WebView从初始化阶段就使用自定义客户端,完整捕获从0到100的加载进度。
  • 仅配置一次映射,避免重复执行冗余代码影响性能。
  • 调用基类方法可保留Maui原生WebChromeClient的默认行为,防止引入未知问题。

内容的提问来源于stack exchange,提问作者Ahad Porkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:20:28