Включить кэш приложений в WKWebView
Мне известно, что автономный кэш приложений не поддерживается в iOS WKWebView.
Это включено в Safari, поэтому я искал ответственный код в проекте webkit и нашел это
WKPreferences
- (void)_setOfflineApplicationCacheIsEnabled:(BOOL)offlineApplicationCacheIsEnabled;
Кто-нибудь знаком с этим методом? Можно ли включить кэш приложений в iOS, используя этот закрытый метод? (Я не собираюсь отправлять приложение в Appstore)
2 ответа
Да, мы можем включить кэш приложения, открыв частный API
Создать категорию для WKPreferences
и добавить к подписи следующего метода.
@interface WKPreferences (MyPreferences)
- (void)_setOfflineApplicationCacheIsEnabled:(BOOL)offlineApplicationCacheIsEnabled;
@end
(Я попытался выполнить executeSelector: withObject:, но это не сработало. Не знаю почему)
После инициализации WKWebView включите appcache, вызвав вышеуказанный метод в следующем объекте
[_wkWebView.configuration.preferences _setOfflineApplicationCacheIsEnabled:YES];
Он создаст файл ApplicationCache.db в каталоге Cache и позволит веб-приложению работать в автономном режиме.
Предупреждение:
2.5. Приложения, которые используют непубличные API, будут отклонены
Согласно этому твиту от Apple, начиная с iOS 10, кэш приложений теперь поддерживается в WKWebView
:
https://twitter.com/andersca/status/743259582252879872
... как и этот отчет об ошибке WebKit:
https://bugs.webkit.org/show_bug.cgi?id=152490
Я проверил это в WKWebView
используя этот сайт:
http://webdbg.com/test/appcache/
и может подтвердить, что он работает должным образом как в iOS Simulator, так и на устройствах под управлением iOS 10.