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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:50:37