Мы пытаемся сохранить содержимое (HTML) WKWebView в постоянном хранилище (NSUserDefaults, CoreData или файл на диске). Пользователь может видеть один и тот же контент при повторном входе в приложение без подключения к Интернету. WKWebView не использует NSURLProtocol как UIWebView (см. Post здесь).
Хотя я видел сообщения, что "Кэш офлайн-приложений не включен в WKWebView". (Форумы Apple dev), я знаю, что решение существует.
Я узнал о двух возможностях, но я не мог заставить их работать:
1) Если я открою сайт в Safari для Mac и выберите "Файл → Сохранить как", на изображении ниже появится следующая опция. Для приложений Mac существует [[[webView mainFrame] dataSource] webArchive], но в UIWebView или WKWebView такого API нет. Но если я загружаю файл .webarchive в Xcode на WKWebView (например, тот, который я получил из Mac Safari), тогда контент отображается правильно (html, внешние изображения, видео-превью), если нет подключения к Интернету. Файл .webarchive на самом деле является plist (список свойств). Я попытался использовать фреймворк mac, который создает файл .webarchive, но он был неполным.
2) Я обманул HTML в webView: didFinishNavigation, но он не сохраняет внешние изображения, css, javascript
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()",
completionHandler: { (html: AnyObject?, error: NSError?) in
print(html)
})
}
Мы боремся за неделю, и это главная особенность для нас. Любая идея действительно оценена.
Спасибо!