2014-10-06 97 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