Xamarin.forms 如何为xamarin forms webview设置WKWebviewConfiguration?
我有一个Xamarin表单项目,需要设置某些配置以允许文件访问。在原生xamarin ios项目中,它是通过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
_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是什么意思。您可以显示有关本地内容含义的更多代码。