2011-07-16 9 views
15

私のサイトのPhoneGapにあるキャッシュイメージとhtmlファイルの方法が必要です。私はそれがあるようにインターネット接続なしでユーザーがサイトを見ることを計画しています。しかし、私はSQLデータの格納に関する情報しか見ませんが、イメージを格納する方法(および後で使用する方法)PhoneGapに画像とHTMLファイルをキャッシュする方法

+0

はこの質問を見てみましょう。com/questions/3625640/download-images-and-locally-on-iphone-phonegap-app –

答えて

9

簡単なオフライン操作が必要なようなキャッシュは、それほど簡単ではありません。

最初のオプションはcache manifestです。キャッシュのサイズのようないくつかの制限がありますが、あなたが望むことをするように設計されているので、あなたのために働くかもしれません。

また、ファイルシステムAPIを使用してデバイスのディスクにコンテンツを保存することもできます。これにはセキュリティのような欠点があります。通常、Webからロードする場合とは異なるパス/ URLからファイルをロードする必要があります。その例は、hydraプラグインを参照してください。

最終的な選択肢は、localStorage(すべてのプラットフォームでプライベートになるというメリットがある)に物を保存し、必要に応じてそこから引き出すことです...つまり、すべての画像をbase64'ingすることです標準的なキャッシングからかなり離れています。

+0

Mozillaに従ってアプリケーションキャッシュ(マニフェスト)を使用することを強くお勧めします。https://developer.mozilla .org/en-US/docs/Web/HTML/Using_the_application_cache –

23

画像をキャッシュするには、私が作成したこのライブラリをチェックアウトしてください: imgcache.js これは、ローカルファイルシステムを使用してイメージをキャッシュする目的のために設計されています。サンプルをチェックアウトすると、イメージがロードされないとき(オフラインであるか、接続が非常に悪いため)に検出され、自動的にキャッシュされたイメージに置き換えられることがあります。 webappのユーザーは、それがオフラインであることに気付かない。

htmlページについては、HTMLの静的ファイルの場合は、Webアプリケーション(file:// phonegap)にローカルに保存できます。 動的に生成されたページの場合は、データ量が少ない場合はlocalStorage API、それ以外の場合はファイルシステムAPIを確認してください。

私のWebアプリケーションでは、自分のサーバーからjsonデータのみを取得します(そして、Backbone + Underscoreを使用して処理/レンダリングします)。 jsonペイロードはlocalStorageに格納されます。アプリケーションがオフラインになると、サーバー(ローカルで保存されているBackbone.dualStorageのフォーク)ではなくlocalStorageからjsonデータが取得されます。

その後、完全なオフラインエクスペリエンスが得られます。

+1

私はPhonegap(2.2.0)の最新ビルドでこれを使用しました。 – Max

+0

私はimgcache.jsを使用しています。イメージファイルをキャッシュしている間、icon.pngを7678dkld9dio.pngのような別の名前で保存します。何も足りない?イメージファイルの名前を変更します。 shell @ android:/ storage/sdcard0/ws $ ls Energy.png shell @アンドロイド:/ storage/sdcard0/ws $ cd .. シェル@アンドロイド:/ストレージ/ sdcard0 $ cd imgcache/ シェル@ android:/ storage/sdcard0/imgcache $ ls – yokks

+1

これは正しいので、設計通りです。これは、ファイル名がキャッシュ内の一意のファイル名で名前が変更されていない場合(同じフォルダにすべて保存されている)、ファイル名は同じですがキャッシュするURLが異なる2つの異なるイメージがある可能性があります。 2つの画像のうち1つだけが保存され、もう一方の画像が置き換えられます。 – chrisben

1

Android OSでのキャッシュ処理は非常に可能です。上記のようにアップルには画像のサイズやキャッシュサイズなどの制限があります。

iOSでのキャッシュを統合して許可する場合は、「キャッシュマニフェスト」を使用してください。ドローバックと制限を心に留めておいてください。 ファイルをマイアプリのDocumentsフォルダに保存する場合、Appleはあなたのアプリを拒否します。その理由はiOS6の後にドキュメントフォルダの下のすべてのデータをiColしてiCouldにするためです.Appleは画像やJSONファイルのような大きなデータを許可しないので、サーバから同期してこのフォルダに保存できます。

だから、別の回避策がありますので、代わりにLocalFileSystem.TEMPORARYを使用できます。データはライブラリ/キャッシュに保存されませんが、データはiCloudへの自動バックアップではなく、自動削除されていないAppの一時フォルダに保存されます。ます。http:// stackoverflowの

よろしく ラジーブは

+0

面白い.....! –

関連する問題