2014-10-06 23 views
6

Tệp kê khai bộ nhớ cache hoạt động tốt và các sự kiện được kích hoạt trong safari trong IOS 8. Không hoạt động ở WKWebView bất kỳ ai khác giải quyết vấn đề này?WKWebView Tệp kê khai bộ nhớ cache không hoạt động IOS8

UIKit nhập khẩu

WebKit nhập khẩu

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() 
} 

}

Bộ nhớ cache ứng dụng trở lại như được hỗ trợ nếu tôi được sử dụng html5test.com

EDIT:

cửa sổ .applicationCache không trả về undefined hoặc khi lo aded từ WKWebView

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

EDIT 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 Lỗi: InvalidStateError: DOM ngoại lệ 11: Một cố gắng đã được thực hiện để sử dụng một đối tượng mà không phải là, hoặc là không còn, có thể sử dụng được nữa.

+1

Tôi không hiểu tại sao một người nào đó sẽ downvote điều này. ApplicationCache là một tính năng chính và không thể sử dụng nó với WKWebView là một sự trở lại lớn. –

+0

Điều này khiến tôi đau đầu. Tại sao chúng lại hỗ trợ localstorage chứ không hỗ trợ cache manifest? Bất kỳ Ý tưởng nào về cách sử dụng tính năng gốc này thay thế? Có vẻ như tôi sẽ phải lưu trữ tất cả html/css/js/images tất cả trên thiết bị ... tại sao lại là apple! – Fostah

Trả lời

2

Chỉ để ghi lại, câu hỏi này dường như đã được hỏi và liên kết từ Apple Developer Forums. Phản hồi chính thức từ Apple là chức năng Bộ nhớ cache ứng dụng HTML5 không có sẵn trong 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

Chúng tôi có thể giải quyết vấn đề này bằng cách sử dụng apis riêng ... một bộ trở lại cách tiếp cận này là ... chúng tôi không thể sử dụng các ứng dụng phiên bản appstore ... nếu ứng dụng doanh nghiệp của chúng tôi, chúng tôi có thể sử dụng nó ..tại đây là giải pháp http://goo.gl/jnyX8T –

+0

Tôi không thể truy cập diễn đàn đó bài viết, nhưng tìm thấy một [post] mới (https://forums.developer.apple.com/message/160199#160199) từ tháng 8 năm 2016 về cơ bản nói cùng một điều. – Amelia

1

Tôi nghĩ bạn đang cố gắng giải quyết vấn đề tương tự như tôi. Đây là những gì tôi làm.

  1. Lưu trang bắt đầu của ứng dụng web của bạn thành một tệp HTML (index.html), nhúng mọi thứ (CSS, JS, hình ảnh dưới dạng phông chữ 64, biểu tượng). Và thêm tệp đó vào dự án Xcode của bạn.
  2. Khởi động ứng dụng bằng cách đọc nội dung của tệp HTML và tải nó trong WKWebView của bạn. Bạn có thể đặt cơ sở là cùng url mà bạn có nghĩa vụ phải bắt đầu. Bằng cách này, nó sẽ giống như ứng dụng web được mở trên trang web của bạn.

Lợi ích là ứng dụng của bạn sẽ luôn bắt đầu ngay cả khi mạng của người dùng không tốt. Đây là mã SWIFT mà tôi sử dụng, được cung cấp bởi 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). Nếu bạn muốn mã nguồn đầy đủ, xin vui lòng cho tôi biết và tôi sẽ đăng nó trên 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

Điều này không liên quan gì đến câu hỏi được hỏi. Họ đang tìm cách sử dụng HTML 5 Application Cache, mà dường như không được hỗ trợ trong WKWebView (https://devforums.apple.com/message/1060452) –

Các vấn đề liên quan