【问题标题】:How do you enable webpage caching for WKWebView in Xamarin: iOS?如何在 Xamarin: iOS 中为 WKWebView 启用网页缓存?
【发布时间】:2020-07-28 17:17:10
【问题描述】:
我有一个 Xamarin Forms 应用程序,它使用 WebView 组件来显示我们的 PWA 网站。当用户没有互联网连接时,我们需要 WebView 组件来显示缓存的网页。这在 Xamarin: Android 项目中运行良好,无需额外代码。但是,为 Xamarin: iOS 项目呈现的 WKWebView 似乎没有显示任何缓存页面。
我是 Xamarin 开发的新手,不确定是否有办法为 iOS 项目启用缓存,以便它可以脱机运行(就像 Android 项目一样)。有谁知道在没有互联网连接的情况下如何让 WKWebView 提供缓存的网页?
【问题讨论】:
标签:
caching
xamarin.forms
webview
xamarin.ios
wkwebview
【解决方案1】:
有一个 NSUrlRequestCachePolicy 的 ReturnCacheDataElseLoad 缓存类型,您可以使用它先加载缓存数据,否则从 web 加载。
看看苹果关于NSURLRequestReturnCacheDataElseLoad的文档
使用现有的缓存数据,无论年龄或到期日期,仅在没有缓存数据时才从原始源加载。
因此,iOS Renderer 编码如下:
public class CustomWebViewRenderer :WkWebViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if(e.NewElement != null)
{
NSUrlRequest request = new NSUrlRequest(new NSUrl("https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview"), NSUrlRequestCachePolicy.ReturnCacheDataElseLoad, 5);
LoadRequest(request);
}
}
}