首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为xamarin forms webview设置WKWebviewConfiguration?

如何为xamarin forms webview设置WKWebviewConfiguration?
EN

Stack Overflow用户
提问于 2019-08-27 23:31:10
回答 2查看 1.3K关注 0票数 1

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

代码语言:javascript
复制
_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);

我也必须在forms项目中实现同样的目标。目前,我已经在iOS模块中添加了一个自定义渲染器,但无法设置配置。请在下面找到CustomRenderer。

代码语言:javascript
复制
[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?

EN

回答 2

Stack Overflow用户

发布于 2021-01-27 22:35:57

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

代码语言:javascript
复制
public class CustomWebViewRenderer : WkWebViewRenderer
{
    static WKWebViewConfiguration CreateConfiguration() => new WKWebViewConfiguration
    {
        Preferences = new WKPreferences
        {
            JavaScriptEnabled = true
        }
    };

    public CustomWebViewRenderer() : base(CreateConfiguration()) { }
}
票数 2
EN

Stack Overflow用户

发布于 2019-08-28 02:23:45

您可以调整渲染器:

代码语言:javascript
复制
 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)));
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57678036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档