2

HTML5 Offline Web アプリケーションの仕様には、HTML ページをキャッシュに遅延ロードする方法の例が示されています。

CACHE MANIFEST
FALLBACK:
/ /offline.html
NETWORK:
*

これについては、Dive Into HTML5でウィキペディアの例を使用して説明しています。Web サイトの読み込み時にウィキペディア全体をキャッシュする必要はありませんが、ユーザーがアクセスするすべてのページをキャッシュする必要があります。オフライン中にユーザーがアクセスしたページには、カスタム エラー ページが表示される必要があります。

このアプローチの秘訣は、各 HTML ページにマニフェストを明示的に含めることです。マニフェストを含むページは、明示的に言及しなくても自動的にキャッシュに含まれます。したがって、この例では HTML ページをネットワークから読み込み、キャッシュに挿入します。オフラインの場合、キャッシュ内のすべてのページが機能し、キャッシュされていないページはデフォルトで offline.html ページになります。

問題は、マニフェストを含めることができない HTML 以外のファイルの場合です。具体的には、JavaScript でゲームを作成しており、そのゲームにはたくさんの音楽トラックがあります。次の要件があります。

  • ゲームのロード時にユーザーがすべての音楽をダウンロードする必要はありません。
  • ユーザーがオンライン中に新しい音楽トラックに遭遇した場合、そのトラックをダウンロードしてキャッシュする必要があります。
  • ユーザーがオフライン中に新しい音楽トラックに遭遇した場合、無音が聞こえても問題ありません。
  • ユーザーがオフライン中に既に聞いた音楽トラックに遭遇した場合は、キャッシュから再生する必要があります。

音楽ファイルが HTML の場合、上記の手法を使用して、manifest=...最初に読み込まれたときにキャッシュに入れるための属性を与えることができます。しかし、それらは HTML ではないので、それはできません。HTML 以外のリソースをロード時にキャッシュに保存する方法はありますか?

注: 私は、従来の HTTP キャッシュ メカニズムにあまり詳しくありません。代わりに使用できる可能性がありますが、私の経験では、ファイルがブラウザーによってキャッシュされていても、ブラウザーがオフラインの場合は機能しません。この方法で実行できる場合、キャッシュ ヘッダーをどのように構成すればよいですか?

4

2 に答える 2

2

Dive Into HTML5 はそう言っていましたが、ウィキペディアでマニフェストを見つけることができませんでした。ウィキペディアは実際にはこのようには機能しません。Chrome コンソールで、ウィキペディアのアプリケーション キャッシュが見つかりませんでした。

これを試すことができると思います: ユーザーが音楽トラックのダウンロードを終了したら、この情報を AJAX 経由でサーバーに送信します。サーバーは、このユーザーのマニフェストを更新し、この音楽トラックをマニフェストに入れる必要があります。applicationCache.update()その後、ブラウザに強制的にマニフェストを再度チェックさせるように呼び出すことができ、アップデートが検出されます。これは、静的マニフェスト ファイルを使用できないことを意味します。マニフェスト ファイルは動的で、ユーザーに関連している必要があります。

于 2011-06-01T12:38:15.400 に答える
1

Mozilla には正確な解決策があるように見えますが、Firefox でのみ機能します: nsIDOMOfflineResourceList (なぜそれが呼び出されたのかわかりません。これらのメソッドはapplicationCacheオブジェクトに適用されます) にはメソッドがmozAddありmozRemove、JavaScript を使用してオブジェクトをキャッシュに動的に追加できます。 .

それが標準の一部になることを願っています( asaddおよびremove)。それがこの問題の適切な解決策になります。

于 2011-06-03T01:45:44.753 に答える