WKWebView缓存清单无法正常工作IOS8

时间:2014-10-06 15:38:35

标签: ios8 wkwebview

缓存清单工作正常,在IOS 8中的safari中触发了事件。在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在从WKWebView

加载时不返回undefined
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()throws Error:InvalidStateError:DOM异常11:尝试使用不可用或不再可用的对象。

2 个答案:

答案 0 :(得分:2)

仅供记录,此问题似乎已被Apple Developer Forums询问并链接。 Apple的官方回应是WKWebView中没有HTML5应用程序缓存功能:

  

WKWebView中未启用脱机应用程序缓存。请随时通过https://bugreport.apple.com请求提供。

答案 1 :(得分:1)

我认为你正试图像我一样解决同样的问题。这就是我的工作。

  1. 将您的网络应用的起始页保存到一个HTML文件(index.html)中,嵌入所有内容(CSS,JS,图像为base 64,图标字体)。并将该文件添加到您的Xcode项目中。
  2. 通过阅读HTML文件的内容启动应用程序并将其加载到WKWebView中。您可以将基数设置为您应该开始使用的相同URL。这样,它就像在您的网站上打开Web应用程序一样。
  3. 好处是,即使用户的网络不好,您的应用也会始终启动。这是我使用的SWIFT代码,由Matt Neuberg提供(https://books.google.com/books?id=wLaVBQAAQBAJ&pg=PT669&lpg=PT669&dq=addConstraints+wkwebview&source=bl&ots=7trE7MR1zR&sig=VT6GDBGbDw9dh89wDb5Uajd4gUY&hl=en&sa=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)