Luk*_* Vo 2 .net android webview maui
更新:这是一个已确认的错误。请在这里投票,因为它并没有真正受到 MS 的太多关注。
我需要按照该指南重写加载应用内 HTML 内容shouldInterceptRequest的方法。WebViewClient
这是带有可重现代码的存储库:GitHub。我还从MS Q&A中获取了示例代码:
// ...
.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;
}
}
Run Code Online (Sandbox Code Playgroud)
在存储库中,我包含了 2 个自定义处理程序:
ProblemHandler2这是 MSFT 的准确片段。我意识到一个问题:设置 MAUIWebView的Source属性不再导航真正的 Android WebView: WebViewHandler.Mapper.AppendToMapping("MyHandler", (handler, view) =>
{
#if ANDROID
var xWv = handler.PlatformView;
// For ProblemHandler2, this is needed to actually navigate:
xWv.LoadUrl("https://www.google.com/");
#endif
});
this.wv.Source = "https://www.google.com/";
Run Code Online (Sandbox Code Playgroud)
ProblemHandler1使用默认结果并添加自定义处理程序。这解决了导航问题,但是,两个问题都有相同的问题:ShouldInterceptRequest从未被调用过。即使我手动单击链接进行导航,它也不会被调用。我缺少什么?我确信CustomWebClient已正确创建和设置。
我注意到其他回调都不起作用,例如:
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);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用,WebViewHandler.Mapping但它也不起作用:
WebViewHandler.Mapper.AppendToMapping("MyHandler", (handler, _) =>
{
#if ANDROID
handler.PlatformView.SetWebViewClient(new CustomWebClient());
#endif
});
Run Code Online (Sandbox Code Playgroud)
我可能是错的,但是,我认为这可能与您重写的方法版本有关CreatePlatform,
您可以尝试默认的 WebViewHandler 正在执行的操作吗:
protected override WebView CreatePlatformView()
{
var platformView = new MauiWebView(this, Context!)
{
LayoutParameters = new LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent)
};
platformView.Settings.JavaScriptEnabled = true;
platformView.Settings.DomStorageEnabled = true;
platformView.Settings.SetSupportMultipleWindows(true);
return platformView;
}
Run Code Online (Sandbox Code Playgroud)
检查此 URL 以了解默认处理程序 CreatePlatform 设置:
另外,不要在处理程序中使用应用程序上下文,处理程序有自己可以使用的上下文属性。
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |