MAUI WebView中Android WebViewClient的ShouldInterceptRequest未触发(已确认Bug)
MAUI WebView自定义WebViewClient问题
问题概述
此问题已被确认为Bug,目前微软对该问题关注度较低。
我需要重写WebViewClient的shouldInterceptRequest方法,按照Android官方规范加载应用内HTML内容。
参考代码与可复现场景
我参考微软问答的示例代码实现了自定义Handler,相关代码如下:
// ... .ConfigureMauiHandlers(handlers => { handlers.AddHandler<Microsoft.Maui.Controls.WebView, ProblemHandler2>(); }); // ... internal class ProblemHandler2 : WebViewHandler { protected override Android.Webkit.WebView CreatePlatformView() { var wv = new Android.Webkit.WebView(Android.App.Application.Context); wv.SetWebViewClient(new CustomWebClient()); return wv; } }
自定义Handler的具体问题
仓库中包含两个自定义Handler,各自存在不同问题:
- ProblemHandler2:完全沿用官方示例代码,但设置MAUI WebView的
Source属性无法触发Android WebView的导航,必须手动调用LoadUrl才能实现跳转:
WebViewHandler.Mapper.AppendToMapping("MyHandler", (handler, view) => { #if ANDROID var xWv = handler.PlatformView; // ProblemHandler2必须手动调用此方法才能完成导航 xWv.LoadUrl("https://www.google.com/"); #endif }); this.wv.Source = "https://www.google.com/";
- ProblemHandler1:使用默认返回值并添加自定义Handler,解决了导航触发的问题,但两个Handler存在一个共同的核心问题:
ShouldInterceptRequest方法始终未被调用,即使手动点击页面内链接导航也无任何响应。我已确认CustomWebClient已被正确创建并绑定到WebView。
除此之外,WebViewClient的其他回调方法也无法正常工作,例如:
public override void OnPageStarted(Android.Webkit.WebView view, string url, Bitmap favicon) { Debugger.Break(); Debug.WriteLine(url); base.OnPageStarted(view, url, favicon); } public override void OnPageFinished(Android.Webkit.WebView view, string url) { Debugger.Break(); Debug.WriteLine(url); base.OnPageFinished(view, url); }
我还尝试通过WebViewHandler.Mapping直接设置自定义WebClient,结果同样无效:
WebViewHandler.Mapper.AppendToMapping("MyHandler", (handler, _) => { #if ANDROID handler.PlatformView.SetWebViewClient(new CustomWebClient()); #endif });
内容的提问来源于stack exchange,提问作者Luke Vo
相关产品推荐
相关产品推荐

