Xamarin WebView无法加载跨域页面,需设置SetSupportMultipleWindows为false
在Xamarin.Forms Android中设置WebView的SetSupportMultipleWindows为false
Xamarin.Forms的WebView是跨平台封装控件,无法直接在Forms层设置Android原生的SetSupportMultipleWindows属性,需要通过自定义渲染器实现,具体步骤如下:
1. 在Android项目中添加自定义渲染器类
在你的TruckAndTrailer.Droid项目里新建一个名为CustomWebViewRenderer.cs的文件,粘贴以下代码:
using Android.Content; using Android.Webkit; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using TruckAndTrailer.Droid; [assembly: ExportRenderer(typeof(WebView), typeof(CustomWebViewRenderer))] namespace TruckAndTrailer.Droid { public class CustomWebViewRenderer : WebViewRenderer { public CustomWebViewRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e) { base.OnElementChanged(e); if (Control != null) { // 设置禁止多窗口支持 Control.Settings.SetSupportMultipleWindows(false); // 拦截新窗口请求,确保页面在当前WebView加载 Control.SetWebChromeClient(new CustomWebChromeClient()); } } } public class CustomWebChromeClient : WebChromeClient { // 拒绝创建新窗口 public override bool OnCreateWindow(WebView view, bool isDialog, bool isUserGesture, Message resultMsg) { return false; } } }
2. 验证效果
无需修改你现有的MainPage.xaml或MainPage.xaml.cs代码,重新编译运行Android项目后,WebView会自动应用设置:
SetSupportMultipleWindows(false)禁用WebView多窗口功能- 自定义
WebChromeClient拦截新窗口请求,确保跨域名页面在当前WebView内加载
内容的提问来源于stack exchange,提问作者VapeBoro
相关产品推荐
相关产品推荐

