Манифест WKWebView Cache не работает IOS8

Манифест кеша работает нормально, а события запускаются в сафари в IOS 8. В WKWebView вообще не работает. Кто-нибудь еще решает эту проблему?

импортировать UIKit

импортировать WebKit

class ViewController: UIViewController {
@IBOutlet var containterView : UIView! = nil
var webView : WKWebView?
override func loadView(){
    super.loadView()
    self.webView = WKWebView()
    self.view = self.webView!
}
override func viewDidLoad() {
    super.viewDidLoad()
    var url = NSURL(string:"http://html5demos.com/offlineapp")
    var req = NSURLRequest(URL:url)
    self.webView!.loadRequest(req)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

}

Кэш приложения возвращается как поддерживаемый, если бы я использовал html5test.com

РЕДАКТИРОВАТЬ:

window.applicationCache также не возвращает значение undefined при загрузке из WKWebView.

console.log("Initializing Page");       
if (window.applicationCache == undefined){
    console.log("Application cache not suported!");
    updateSplash();
}
console.log(window.applicationCache); returns: DOMApplicationCache

РЕДАКТИРОВАТЬ 2:

if (typeof window.applicationCache.update === 'function'){
        console.log("Application has method update");
        console.log(window.applicationCache.update); //shows swapCache() and update() methods
        window.applicationCache.update();   
    }

window.applicationCAche.update() выдает ошибку: InvalidStateError: DOM Exception 11: была предпринята попытка использовать объект, который не является или более непригоден для использования.


person KleggerKoder    schedule 06.10.2014    source источник
comment
Я не понимаю, почему кто-то понизил бы это. ApplicationCache — важная функция, и невозможность использовать ее с WKWebView — это большой возврат.   -  person Francesco Frapporti    schedule 05.11.2014
comment
Это вызвало у меня большие головные боли. Зачем им поддерживать локальное хранилище, а не манифест кеша? Любые идеи о том, как обойти это, используя вместо этого собственные функции? Похоже, мне придется хранить все html/css/js/images на устройстве... почему Apple, почему!   -  person Fostah    schedule 02.09.2015


Ответы (2)


Просто для протокола: похоже, что этот вопрос был задан и связан с Apple Форумы разработчиков. Официальный ответ Apple заключается в том, что функция кэширования приложений HTML5 недоступна в WKWebView:

Кэш автономного приложения не включен в WKWebView. Не стесняйтесь запрашивать, чтобы он был доступен через https://bugreport.apple.com.

person Michael McGuire    schedule 07.01.2015
comment
Мы можем решить эту проблему, используя частный API ... один из недостатков этого подхода: ... мы не можем использовать приложения версии магазина приложений ... если это корпоративные приложения, мы можем его использовать ... вот решение goo.gl/jnyX8T - person Durai Amuthan.H; 01.02.2016
comment
Я не смог перейти к этому сообщению на форуме, но нашел новое сообщение от Август 2016 в основном говорит то же самое. - person Amelia; 31.10.2016

Я думаю, вы пытаетесь решить ту же проблему, что и я. Это то чем я занимаюсь.

  1. Сохраните стартовую страницу вашего веб-приложения в один HTML-файл (index.html), внедрив все (CSS, JS, изображения в формате base 64, шрифты значков). И добавьте этот файл в свой проект Xcode.
  2. Запустите приложение, прочитав содержимое HTML-файла и загрузив его в свой WKWebView. Вы можете установить базу как тот же URL-адрес, с которого вы должны начать. Таким образом, веб-приложение будет открыто на вашем веб-сайте.

Преимущество заключается в том, что ваше приложение всегда будет запускаться, даже если сеть пользователя не очень хороша. Вот код SWIFT, который я использую, любезно предоставленный Мэттом Нойбергом (https://books.google.com/books?id=wLaVBQAAQBAJ&pg=PT669&lpg=PT669&dq=addConstraints+wkwebview&source=bl&ots=7trE7MR1zR&sig=VT6GDBGbDw9dh89wDb5Uajd&hlensa=gUY).X&ei=cyyeVNH4MM3ToATukoDgAQ&ved=0CDkQ6AEwBA#v=onepage&q=addConstraints%20wkwebview&f=false). Если вам нужен полный исходный код, сообщите мне, и я опубликую его на Github.

    let templatepath = NSBundle.mainBundle().pathForResource("index", ofType: "html")!
    let base = NSURL(string:"http://m.ftchinese.com/iphone-2014.html#iOSShare")
    var s = NSString(contentsOfFile:templatepath, encoding:NSUTF8StringEncoding, error:nil)!
    self.webView!.loadHTMLString(s, baseURL:base)
person Oliver Zhang    schedule 27.12.2014
comment
Это не имеет никакого отношения к заданному вопросу. Они хотят использовать кэш приложения HTML 5, который, похоже, не поддерживается в WKWebView (devforums.apple .com/message/1060452) - person Michael McGuire; 07.01.2015