2014-10-06 94 views
6

缓存清单工作正常,并在IOS 8 Safari浏览器中触发事件。在WKWebView中根本没有任何人可以解决这个问题?WKWebView缓存清单不工作IOS8

进口的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

编辑:

窗口应用程序缓存不会返回未定义的任何时候从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异常11:试图使用一个对象,它是没有,或者是不再可用。

+1

我不明白为什么有人会为此付出代价。 ApplicationCache是​​一个主要功能,不能与WKWebView一起使用,这是一个很大的倒退。 – 2014-11-05 01:35:06

+0

这让我头痛不已。他们为什么会支持localstorage而不是缓存清单?任何想法如何解决这个使用本地功能,而不是?看起来我将不得不将所有的html/css/js/images全部存储在设备上......为什么是苹果为什么! – Fostah 2015-09-01 21:34:30

回答

2

只是为了记录,这个问题似乎已被询问并链接从Apple Developer Forums。 Apple的官方回应是,HTML5应用程序缓存功能在WKWebView中不可用:

The offline application cache is not enabled in WKWebView. Feel free to request that it be made available via https://bugreport.apple.com .

+1

我们可以解决这个问题,使用私人apis ...一回到这种方法是...我们不能使用appstore版本的应用程序...如果它的企业应用程序,我们可以使用它..这里的解决方案http://goo.gl/jnyX8T – 2016-02-01 08:45:54

+0

我无法进入该论坛但自2016年8月起发现了一个新的[post](https://forums.developer.apple.com/message/160199#160199),基本上也是这样说的。 – Amelia 2016-10-31 17:36:42

1

我认为你正在努力解决同样的问题。这就是我所做的。

  1. 将网页应用程序的起始页保存到一个HTML文件(index.html)中,将所有内容(CSS,JS,图像作为base 64,图标字体)嵌入。并将该文件添加到您的Xcode项目中。
  2. 通过阅读HTML文件的内容启动应用程序并将其加载到WKWebView中。您可以将基础设置为与您应该开始的网址相同的网址。这样,就好像Web应用程序在您的网站上打开一样。

好处是,即使用户的网络不好,您的应用也会始终启动。这是我使用的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) 
+0

这与问的问题无关。他们正在寻找使用HTML 5应用程序缓存,它似乎不支持WKWebView(https://devforums.apple.com/message/1060452) – 2015-01-07 15:56:57