2

UIWebView とオフライン キャッシュに問題があります。Webkit のバグかどうかはわかりません。何が問題なのか説明しましょう。

私の例では、https ://developer.apple.com/safridemos/Checkers/ で入手できる Apple の Checkers デモを使用しています(マニフェストが機能することは確かです)。

だから私は UWebView を作成し、次のようにリクエストをロードしています:

NSURL *url = [NSURL URLWithString:@"https://developer.apple.com/safaridemos/Checkers/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];

.manifest ファイルに含まれるファイルがデバイスにキャッシュされているかどうかを確認するには、アプリケーション フォルダーで確認します。

APP_FOLDER/ライブラリ/キャッシュ/xxxx.manifest/ApplicationCache.db

ApplicationCache.db で:

SELECT * FROM CacheResources;

マニフェストに含まれるすべてのキャッシュされたリソースを提供してくれます (うまくいきます!!)。

ここで、アプリを終了し、ネットワーク接続をシャットダウンして、アプリを再度起動します。ネットワークに接続していなくても、ゲームは正常に読み込まれます。

さて、ここで私の問題です。

NSURLRequest を使用して webView をロードする代わりに、HTML 文字列を使用したい (3 番目の API が json を介して HTML テキストを送信するため)

UIWebView は次のようにロードされます。

NSURL *url = [NSURL URLWithString:@"https://developer.apple.com/safaridemos/Checkers/"];

NSString *html = @"<html manifest=\"OfflineCheckers.manifest\"><head><title>Checkers</title><script>window.applicationCache.onupdateready = function() { console.log(\"Swapping in new applicationCache\"); applicationCache.swapCache(); }</script><meta name=\"viewport\" content=\"width=640,user-scalable=no\" /><meta name=\"apple-mobile-web-app-capable\" content=\"yes\" /><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\" /><link rel=\"icon\" href=\"favicon.ico\" /><link rel=\"apple-touch-icon-precomposed\" href=\"resources/apple-touch-icon-precomposed.png\"/><link rel=\"apple-touch-startup-image\" href=\"resources/startup.png\"/><link href=\"resources/Checkers.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/Achievements.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/HighScores.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/EndGame.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/GameManager.css\" rel=\"stylesheet\" type=\"text/css\" /><link href=\"resources/Utilities.css\" rel=\"stylesheet\" type=\"text/css\" /></head><body onload=\"initializeScreen();\"><script src=\"resources/Achievements.js\"></script><script src=\"resources/AIOpponent.js\"></script><script src=\"resources/Checkers.js\"></script><script src=\"resources/EndGame.js\"></script><script src=\"resources/GameManager.js\"></script><script src=\"resources/HighScores.js\"></script><script src=\"resources/Utilities.js\"></script><div id=\"GameParent\"></div><script>document.body.board = new CheckerBoard(document.getElementById(\"GameParent\"));</script></body></html>";
[self.webView loadHTMLString:html baseURL:url];

最初にアプリを削除して、以前にキャッシュされたすべてのリソースを削除します。次に、ネットワーク接続をオンに設定し、アプリを起動します。同じことが起こり、webview が読み込まれ、リソースがキャッシュされます...

ネットワーク接続をシャットダウンすると、webView が読み込まれなくなります。これは、loadHTMLString:baseURL を呼び出すようなものです: アプリケーション キャッシュを使用しないでください。

アプリのドキュメント フォルダーにあるすべてのオフライン リソースをダウンロードし、baseURL をそのフォルダーに設定するという解決策があることは知っていますが、HTML 5 オフライン キャッシュ マニフェストがそれを処理するためにここにあるので、それを使用したいと思います。私の問題を解決する方法はありますか? どんな助けでも大歓迎です。

みんなありがとう。

4

0 に答える 0