4

HTML5 アプリケーション キャッシュの内容を照会する方法はありますか?

キャッシュされた Web コンテンツを大量に使用する iOS アプリケーションを作成しています。アプリがオフラインのときに特定のページを読み込む前に、ページがキャッシュに存在するかどうかを確認したいと思います。そうでない場合は、そのコンテンツを表示するにはオンラインである必要があることをユーザーに通知します。もしそうなら、先に進んでロードします。

現在、iOS には独自の URL キャッシュ システムがあり、最初は次の方法でキャッシュの内容を確認できると思っていました。

if ([[NSURLCache sharedURLCache] cachedResponseForRequest:myRequest] != nil) {
    // go ahead and load the page
}
else {
    // notify the user that the content isn't available
}

愚かな私。iOS のキャッシュと HTML5 のキャッシュは無関係のようです: -cachedResponseForRequest: URL が HTML5 アプリケーション キャッシュにあることがわかっている場合でも (Safari Web デバッガーを使用して)、要求に対して nil を返します。

では、HTML5 アプリケーション キャッシュの内容をクエリする方法はありますか? Objective-C から関連する JS をいつでも実行できるので、答えが Objective-C コードまたは Javascript を使用するかどうかは問題ではありません。

4

2 に答える 2

2

HTML5 AppCache には 2 つのプロパティがあり、通常の操作ではそうする必要がないことを意味します。

  1. AppCache の更新操作はアトミックであり、キャッシュ全体が更新されるか、まったく更新されないかのいずれかです。
  2. AppCache が作成されると、キャッシュ内のすべてのファイルがキャッシュから提供されます

最終的な結果として、マニフェスト ファイルの特定のバージョンについて、ブラウザに読み込まれるその中にリストされているファイルは、マニフェストにリストされている他のすべてのファイルと一致します。チェックする必要があるのはwindow.applicationCache.status、そうでないことを確認することだけですUNCACHED

別の可能性があります。Dive Into HTML5で説明されているように、AppCache にファイルを「遅延追加」している場合、どのファイルがキャッシュされているかわからない可能性があります。この場合、オンライン状態を検出するためのアプローチの 1 つを適応させることができます。完全にテストされたソリューションを提供するつもりはありませんが、一般的な考え方は次のとおりです。

  1. 固有の識別子 (通常はページに表示される可能性が低いもの) を含む Web ページを作成します。識別子は、それ以外の場合は通常のページの非表示のコンテンツに含まれている可能性があります。
  2. FALLBACKこのページをマニフェストでジェネリックとして設定します。
  3. AJAX でページをリクエストします。
  4. 一意の識別子の応答をスキャンします。見つかった場合は、要求されたページが AppCache にないことがわかります
于 2013-01-20T17:12:39.933 に答える
1

はい、キャッシュはApplication.dbに保存されます。

于 2013-02-20T03:56:35.063 に答える