2012-01-18 5 views
2

私はHTML5マニフェストを使用して、アプリケーションをオフラインで作業できるようにしています。リソースがあります - /background.png - 時々更新されるかもしれませんが、アプリケーションがオフラインの場合は、最後に取得したバージョンが使用に適しています。私が望むのは、ブラウザがオンラインであれば/background.pngを要求するが、オフラインであるためにリクエストが失敗した場合やサーバがダウンしている場合はキャッシュされたバージョンにフォールバックすることです。マニフェスト管理のリソースは、オフライン時に自身のキャッシュされたコピーにフォールバックできますか?

NETWORK: 
/background.png 

のようなマニフェストエントリを持つテストは、リソースを要求しようと常にブラウザを作りました。オフラインの場合、appcacheからコピーを返すのではなく、エラーを返します。それは私が望むものではありませんが、NETWORKが私が理解しているように振る舞います。

私もそれは意味「あなたは新しいものを得ることができない場合は、バックキャッシュコピーにフォール」が、その構成では、ブラウザがリソースを要求しようとしないかもしれないことを望ん

FALLBACK: 
/background.png /background.png 

を試してみましたそれがオンラインの場合。同じリソースが二回(一回のimg SRC =「background.png」ため、一度要求した - 私は考えられ

もう一つの可能​​性は

CACHE: 
/offline-background.png 

FALLBACK: 
/background.png /offline-background.png 

が、同じリソースに対して2つの異なる名前を持つでしたキャッシュされたオフラインコピーの場合) - 魅力的でないハックのようでした。

background.pngが変更されたときにマニフェストに任意の変更を加えることもできますが、ブラウザがマニフェストのすべてをチェックする可能性があります。

HTML5マニフェストから「新しいものを入手できなければ、私が持っているものを使う」ことができますか?これは合理的なパターンのように思えるので、それを行うためのきれいな方法があると思います。そうでない場合は、誰かが別のアプローチを提案できますか?前もって感謝します!

EDIT:オリジナルの質問は「news.json」を参照していました。これは、リソースがJavaScriptによって取得されたことを意味しますが、私はそれを「background.png」に変更して、これは、ページで使用されるすべてのリソースを使用します。

答えて

0

キャッシングを自分で管理する最も良い方法は、local storageに貼り付けることです。ニュースフィードのJSONを単一の変数に単純にドロップすることができます。 /news.jsonファイルには200レスポンスのキャッシュされたコピーのみを更新するようにリクエストすると、残りのアプリでは常にそのコピーをローカルストレージに使用します。

+0

お寄せいただきありがとうございます。このアプローチは、AJAXが要求したものに対しても機能します。元の質問のリソース名の私の選択は確かに暗示しています。しかし、私はJavaScriptが関与していない単純な画像参照を含め、ページで使用できる*リソースの問題を解決しようとしています。私はオフラインストレージで「自分だけ」をロールアップするのではなく、この素晴らしい新しいオフラインキャッシュ機能を使用できるようにしたいと考えています。 「news.json」ではなく「background.png」を参照して、意図を明確にするように編集しました。再度、感謝します! – jgarbers

+0

@jgarbersそれからうまくいかないでしょう。マニフェストにファイルをリストすると、そのファイルはアプリケーションキャッシュから提供されます。マニフェストファイル自体を更新するまで、サーバーからは更新されません。それが動作するように設計されている方法:不変のものがマニフェストに入ります。変更するもの(すなわち、データ)はAJAXによって要求され、あなたはあなた自身のキャッシュを処理します。イメージをデータ駆動型にするには、 'canvas'または' svg'を使うことを検討してください。 – robertc

+0

私はまだ奇妙だと思うのですが、デザインが「合理的なパターン」だとサポートしていないのはなぜですか?「オフラインの場合は使用しますが、そうでない場合は新しいものを確認してください」 - あなたの答えを受け入れるでしょう。私が聞きたかったものではないかもしれませんが、それは正しいです! – jgarbers

関連する問題