2

appcache を使用する iPad Web アプリを開発しました。完全にオフラインのアプリを意図したものではありませんが、3G 経由で送信されないように、大きな画像ファイルを保存するために appcache を使用しています。問題は、マニフェストが更新されると、iPad が wi​​fi または 3G に接続されているかどうかにかかわらず appcache が更新されることです。これには費用がかかる可能性があります。

appcache を更新できるかどうかをユーザーに決定させることは可能ですか? 私が見たところ、これは不可能です。すべて自動的に行われ、イベントを取得するだけです。しかし、マニフェストをその場で書くなどの策略があるかもしれません。

それが役立つ場合は、サーバー側で PHP を使用します。ありがとう。

4

3 に答える 3

5

接続タイプ: 理論と未来

接続タイプ (イーサネット wifi 2g 3g 4g など) の情報を提供するW3C のネットワーク情報 APIのドラフト仕様がありますが、以下を除いて、まだどのブラウザーにも実装されていません。

  • Android 2.2+ のストック Android ブラウザー (Google Chrome ブラウザーではありません)

    navigator.connection.type// W3C ドラフトに基づく (ストック Android ブラウザに実装)

  • 正確にはブラウザではないPhoneGap

    navigator.network.connection.type// PhoneGap で

将来その情報があれば、ユーザーがセルラーデータを持っているかどうかを検出し、画像の src を一時的に削除して、確認ダイアログでユーザーに尋ねることができます。

また、おそらく次を使用してアプリのキャッシュ更新をキャンセルする必要があります: window.applicationCache.abort()(ドキュメント)

現実

残念ながら、現時点では Net Info API は利用できません (少なくとも普及していません) が、将来的には確実に役立つでしょう。

ロングショット

ネットワーク速度 (DIAL = ダイヤルアップ、DSL = ブロードバンド/ケーブル、COMP = 会社/T1) を含むデータベースがありますが、私はそれを使用したことがなく、役立つとは思えません。

動的アプリ キャッシュ

これをチェックしている間、ネットワーク情報 API と組み合わせるために、その場でマニフェスト宣言と共に html タグを生成しようとしましたが、AppCache マニフェストは JavaScript の実行前に読み込まれ、その後は影響を受けません。そのため、Javascript を使用してその場でマニフェスト ファイルを変更することはできず、データ URI はオプションではありません。

代替ソリューション

HTML5 アプリケーション キャッシュは、現時点では手付かずの野獣であり、それを改善するための話し合いが行われています。より複雑な構成をサポートするように変更されるまでは (帯域幅レベル フラグはすばらしいでしょう)、ソリューションの見方を変えることができますが、現時点では App Cache が最適かもしれません。

画像の大きさによっては、通常のブラウザ キャッシュに頼ることができます。localStorageと遠未来の有効期限 HTTP ヘッダーを組み合わせることができます。ロード/キャッシュされた画像を追跡するための LocalStorage。

  • 最初に、画像の HTTP ヘッダーに有効期限のはるか先の日付を追加します
  • ページの読み込み時に、imgs からすべての src を削除します
  • 画像をループし、各画像が過去に読み込まれたかどうか localStorage を確認します
  • 過去に読み込まれていない画像がある場合、それらの画像のダウンロードを確認するダイアログを表示します
  • 画像が過去に読み込まれた場合は、src を img に戻します
  • ダウンロードした画像ごとに、その URL を localStorage に保存します
于 2012-10-14T19:59:37.497 に答える
1

iPad での indexedDB の状況はわかりませんが、これは別の解決策になる可能性があります。

つまり、Indexeddb はクライアント側のデータベースです。データは、キーと値のペアであるオブジェクト ストアに格納されます。最大ストレージ容量は、理論的にはディスク容量の最大値です。indexeddb の詳細については、次を参照してください。

indexeddb でできること:

誰かがページに移動すると:

  • indexeddb に存在する場合は、すべてのイメージ タグを確認します。
  • 存在する場合
    • indexeddb から画像を取得し、それを image タグに入れます
  • 存在しない場合
    • ダウンロードする
    • indexeddbに保存します
    • 画像タグに画像を入れてください。

余分な (将来) として、Sev によって説明されているように行うことができます: 接続の種類を確認し、高速インターネット接続で作業している場合にのみイメージをダウンロードします。

于 2012-10-19T06:36:38.500 に答える
0

あなたの質問に答えるかもしれない iPad (iOS 6.0.x) で webapp を開発する実用的なソリューションを「発明」しました。

アイデアは、最初に localstorage 変数が設定/定義されているかどうかを確認することです (ページのタイトル、つまり webapp 名を使用します)。

この localstorage 変数が存在する場合は、(webapp サンドボックス コンテキストで) アプリが初めて実行されると想定します。$PHP_SESSION($uuid)この時点で、サーバー側の PHP ランドでの「アプリ間の汚染」を回避するために、UUID を設定します。これに加えて、マニフェストに追加するファイルのリストを CACHE セクションに含む動的な manifest.appcache.php があります。したがって;

<?
echo $manifest_file_list[0]."\n";
?>

JS appcache マニフェスト イベント リスナーを使用して、次のような進行状況を監視します$('#manifestappcache').html(result);

于 2013-05-18T05:12:13.243 に答える