私はオンラインとオフラインの両方で機能するOS X HTML5アプリを書いています。オフラインアプリケーションキャッシュはthisに基づいて試作され、Safariでうまく機能します。 Xcodeでwebviewを使用して簡単なテストを行うと、マニフェストファイルがwebviewによってフェッチされないようです。Mac OS Xでのオフラインアプリケーションキャッシュのサポート埋め込みWebkit webview
<html manifest="example.manifest"><head> <title>Test with
manifest</title> </head> <body> Test with manifest<br> <br>
</body></html>
マニフェストファイルexample.manifestが含まれています:
CACHE MANIFEST
# ver 1
CACHE:
私は、Safariでページのロードをこのページを表示すると、マニフェストが読み込まれているテストする簡単な方法は、この最小限のhtmlファイルを使用しています。私がサファリをやめ、オフラインにしてからSafariを起動してこのページを更新すると、キャッシュからロードされます。ここのオフラインキャッシュは正常に動作しているようです。ウェブビューで
class ViewController: NSViewController {
@IBOutlet var webview: WebView!
let THEURL:String = "http://192.168.23.180/WithManifest/"
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: THEURL)
let request = NSURLRequest(URL: url!, cachePolicy:NSURLRequestCachePolicy.UseProtocolCachePolicy ,timeoutInterval: 10)
webview.mainFrame.loadRequest(request)
}
}
:次のコードを(ストーリーボードは、ウィンドウの内部ビューコントローラのWebビューを有する)を用い
iはXcodeの7.3で、Webビューでこれを繰り返すのMac OS 10.11、ページが正常に読み込まれますが、終了してオフラインで再起動すると、ページが読み込まれません。ネットワークトラフィックを見ると、マニフェストファイルがクライアントから決して要求されないことは明らかです。私は成功せずにすべての異なるキャッシュポリシーを試しました。私は自分の共有URLキャッシュを作成しようとしましたが、他の場所では成功していません。
let cacheSizeMemory:Int = 4*1024*1024; // 4MB
let cacheSizeDisk:Int = 32*1024*1024; // 32MB
let sharedCache:NSURLCache = NSURLCache(memoryCapacity:cacheSizeMemory, diskCapacity:cacheSizeDisk, diskPath:"nsurlcache")
NSURLCache.setSharedURLCache(sharedCache)
私の質問:
1)HTML5で説明したようにOS Xのサポートオフラインアプリケーションキャッシュ内のWebKitのWebViewのはいますか?
2)「はい」の場合は、動作させるためには何が必要ですか?
私の回避策は、カスタムキャッシュを実装し、アプリケーションでロードロジック(オフラインとオンライン)を実行するNSURLProtocolのサブクラスを実装することです。可能であれば、私はむしろ標準的なアプローチをむしろ使用します。