Включить кэш приложений в 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.

Другие вопросы по тегам