Xamarin.forms 如何为xamarin forms webview设置WKWebviewConfiguration?

Xamarin.forms 如何为xamarin forms webview设置WKWebviewConfiguration?,xamarin.forms,xamarin.ios,wkwebview,xamarin.forms.webview,Xamarin.forms,Xamarin.ios,Wkwebview,Xamarin.forms.webview,我有一个Xamarin表单项目,需要设置某些配置以允许文件访问。在原生xamarin ios项目中,它是通过WKWebviewConfiguration设置的,如 _scormWKPreferences = new WKPreferences { JavaScriptEnabled = true }; ClearCookies(); _scormWKPreference

我有一个Xamarin表单项目,需要设置某些配置以允许文件访问。在原生xamarin ios项目中,它是通过WKWebviewConfiguration设置的,如

_scormWKPreferences = new WKPreferences
            {
                JavaScriptEnabled = true
            };
            ClearCookies();
            _scormWKPreferences.SetValueForKey(NSObject.FromObject(true), (NSString)"allowFileAccessFromFileURLs");
            //  _scormWKPreferences.SetValueForKey(NSObject.FromObject(true), (NSString)"allowUniversalAccessFromFileURLs");
            _scormWKWebconfiguration = new WKWebViewConfiguration();
            _scormWKWebconfiguration.Preferences = _scormWKPreferences;
            _scormWKUserContentController = new WKUserContentController();
            _scormWKUserContentController.AddScriptMessageHandler(this, WKSCRIPT_HANDLER);
            _scormWKWebconfiguration.UserContentController = _scormWKUserContentController;
            CGRect viewRect = new CGRect(0, 0, View.Frame.Width, View.Frame.Height);
            _courseWKWebview = new WKWebView(viewRect, _scormWKWebconfiguration);
我也必须在表单项目中实现同样的目标。目前,我已在iOS模块中添加了自定义渲染器,但无法设置配置。请在下面找到CustomRenderer

[assembly: ExportRenderer(typeof(WebView), typeof(ScholarApp.Droid.Reader.Scorm.ScormCustomRenderer))]
namespace ScholarApp.Droid.Reader.Scorm
{
    public class ScormCustomRenderer : Xamarin.Forms.Platform.iOS.WkWebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            if (e.OldElement == null && e.NewElement != null)
            {
                WKPreferences wkPreferences = new WKPreferences
                {
                    JavaScriptEnabled = true
                };
                wkPreferences.SetValueForKey(NSObject.FromObject(true), (NSString)"allowFileAccessFromFileURLs");
                WKWebViewConfiguration wkConfig = new WKWebViewConfiguration();
                wkConfig.Preferences = wkPreferences;
                WKWebView wkWebView = new WKWebView(Frame, wkConfig);

            }
        }
    }
}

如何将此配置设置为我的WebView?

您可以调整渲染器:

 public class MyWebViewRenderer : ViewRenderer<WebView, WKWebView>
    {
        WKWebView _wkWebView;

        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                WKPreferences wkPreferences = new WKPreferences
            {
                JavaScriptEnabled = true
            };
            wkPreferences.SetValueForKey(NSObject.FromObject(true), (NSString)"allowFileAccessFromFileURLs");
            WKWebViewConfiguration wkConfig = new WKWebViewConfiguration();
            wkConfig.Preferences = wkPreferences;
                _wkWebView = new WKWebView(Frame, config);
                SetNativeControl(_wkWebView);
            }
            if (e.NewElement != null)
            {
                Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Source as UrlWebViewSource).Url)));
            }
        }
    }

您还可以尝试通过参数化的WkWebViewRenderer构造函数传递配置

public class CustomWebViewRenderer : WkWebViewRenderer
{
    static WKWebViewConfiguration CreateConfiguration() => new WKWebViewConfiguration
    {
        Preferences = new WKPreferences
        {
            JavaScriptEnabled = true
        }
    };

    public CustomWebViewRenderer() : base(CreateConfiguration()) { }
}

在不使用WKWebView的情况下,我可以将本地文件从documents文件夹加载到Forms WebView中,但在添加自定义呈现程序和相应代码时,我无法将本地内容加载到WKWebView中。这是另一个问题。您有任何异常吗?没有,没有任何异常您好,无法将本地内容加载到WKWebview是什么意思。您可以显示有关本地内容含义的更多代码。