【问题标题】:WKWebView Cache manifest not working IOS8WKWebView缓存清单不工作IOS8
【发布时间】:2015-01-08 00:00:06
【问题描述】:

缓存清单工作正常,并且在 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() 抛出错误:InvalidStateError:DOM 异常 11:尝试使用不可用或不再可用的对象。

【问题讨论】:

  • 我不明白为什么有人会对此投反对票。 ApplicationCache 是一个主要功能,不能与 WKWebView 一起使用是一个很大的倒退。
  • 这让我很头疼。为什么他们会支持本地存储而不是缓存清单?关于如何使用本机功能解决此问题的任何想法?看起来我必须将所有的 html/css/js/images 都存储在设备上……为什么是苹果!

标签: ios8 wkwebview


【解决方案1】:

为了记录,这个问题似乎是在Apple Developer Forums 上提出并链接的。苹果官方的回应是,HTML5 Application Cache 功能在 WKWebView 中不可用:

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

【讨论】:

  • 我们可以使用私有 api 解决这个问题......回到这种方法的一个原因是......我们不能使用应用商店版本的应用......如果它的企业应用我们可以使用它......这是解决方案goo.gl/jnyX8T
  • 我无法访问该论坛帖子,但发现了一个新的 post 从 2016 年 8 月开始基本上说同样的话。
【解决方案2】:

我认为您正在尝试解决与我相同的问题。这就是我所做的。

  1. 将 Web 应用程序的起始页保存到一个 HTML 文件 (index.html) 中,嵌入所有内容(CSS、JS、基于 64 位的图像、图标字体)。并将该文件添加到您的 Xcode 项目中。
  2. 通过读取 HTML 文件的内容来启动应用程序并将其加载到您的 WKWebView 中。您可以将基础设置为您应该开始使用的相同 url。这样,就好像在您的网站上打开了 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)

【讨论】:

猜你喜欢
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多