首页 > 解决方案 > 有没有办法让来自外部链接的弹出窗口在 Xamarin IOS WKWebview 上工作?

问题描述

大家好,我是从事此项目的 Xamarin 开发人员,其中有一些菜单项重定向到外部链接并将它们加载到 IOS 中的 WKWebview 中。面临的问题是,在您看到该页面上的任何内容之前,某些链接会重定向到显示登录弹出窗口的页面。弹出窗口未显示在 WebView 上。我已经尝试在我的自定义渲染上启用 JavaScript 和 JavaScriptCanOpenWindowsAutomatically 但它仍然无法正常工作我不确定做错了什么。如果我重定向到 Safari,它可以正常工作,但不建议这样做。以下链接是我的自定义渲染中的代码以及我如何在 xaml 中使用它。

自定义渲染

[Xaml 用法][1]在此处输入图片描述

自定义渲染器中的代码

[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]

命名空间 Project.iOS.CustomRenderers {

public class CustomWebViewRenderer : ViewRenderer<CustomWebView, WKWebView>, IWKUIDelegate, IWKNavigationDelegate, IWKScriptMessageHandler
{
    WKWebView wkWebView;
    protected override void OnElementChanged(ElementChangedEventArgs<CustomWebView> e)
    {
        base.OnElementChanged(e);
        if (Control == null)
        {

            WKPreferences pref = new WKPreferences() { JavaScriptCanOpenWindowsAutomatically = true, JavaScriptEnabled = true, };
            var config = new WKWebViewConfiguration();
            config.Preferences = pref;
            wkWebView = new WKWebView(Frame, config);
            wkWebView.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
            wkWebView.UIDelegate = new MyWKWebViewDelegate();
            SetNativeControl(wkWebView);
        }
        if (e.NewElement != null)
        {
            var request = new NSMutableUrlRequest(new NSUrl(Element.Url));
            Control.LoadRequest(request);
            var webView = e.NewElement;
            webView.EvaluateJavascript = async js =>
            {
                var reset = new ManualResetEvent(false);
                Device.BeginInvokeOnMainThread(async () =>
                    {
                        try
                        {

                            await Control.EvaluateJavaScriptAsync(js);
                        }
                        catch (Exception)
                        {
                                    //
                                }
                    });
                await Task.Run(() => { reset.WaitOne(); });
                return null;
            };
        }

    }

}

标签: c#xamarin.formsxamarin.ioswkwebview

解决方案


推荐阅读