6

会社の製品コレクションを表示する iPad (iOS 6 以降を実行) 用の Web アプリを構築しています。

HTML5の「cache.manifest」ファイルを使用すると、すべて完全に機能しました。しかし、キャッシュが約 50MB に増大したため、iPad はアプリケーション データを保存しなくなりました。Safari の設定に応じて、キャッシュ サイズが 50MB から 0.1KB になりました。

では、Web アプリに対する Safari のキャッシュの実際の制限はどのくらいですか? また、アプリケーション キャッシュの最大量を拡大する方法はありますか?

4

1 に答える 1

12

2014 年 6 月 2 日編集: iOS7.1 の最大キャッシュ サイズは 300Mb です。

最近、クライアントからこの正確な質問があったので、調査しました。

IOS6によると(私のテストはすべて iOS6.1 で行われました)、これらは 2 つの異なるものです。

  • モバイル Safari でアクセスする .manifest を使用する Web サイト
  • ウェブサイトから作成された、ホーム画面上のウェブアプリ

.manifest を使用する Web サイトは、ユーザーの許可を求めることで、最大 50 MB のキャッシュを使用できます。それ以上は使えません。この値は、設定/サファリ/詳細で見つけてクリアできます。キャッシュにさらに詰め込もうとすると、errorイベントが発生し、window.applicationCache.statusIDLE になります。

Web アプリケーションは、その Web サイトと同じキャッシュを共有しません。キャッシュ設定/safari/advanced をクリアしても、ホーム画面の webapp には何も起こりません。ユーザー入力なしで50MB以上のキャッシュを受け入れますが、正確な量はわかりません(60MBでテストして成功し、オフラインで完全にアクセスできました.*編集:83MBで試して成功しました)このデータがどこにあるかわかりませんiOS の設定で確認できます。どこにもないと思います。

仕様を見つけるまで、これをテストするのは苦痛でした。iOS6 で完全に動作する API があります。アプリの状態と次のイベントを
確認する必要があります (コードからカット アンド ペーストするため、リスナーを使用します)。window.applicationCache.status

window.applicationCache.addEventListener('checking', onChecking);
window.applicationCache.addEventListener('noupdate', onNoupdate);
window.applicationCache.addEventListener('downloading', onDownloading);
window.applicationCache.addEventListener('progress', onProgress);
window.applicationCache.addEventListener('cached', onCached);
window.applicationCache.addEventListener('updateready', onUpdateready);    
window.applicationCache.addEventListener('obsolete', onObsolete);
window.applicationCache.addEventListener('error', onError);

すべてが iOS 6.1 で動作していますprogressevent.loadedevent.total

webapp はチェックから開始しnoupdate、.manifest が同じ場合に起動します。ステータスはIDLEです。

.manifest が変更された場合、status はDOWNLOADINGで、progressマニフェスト内の各ファイルに対してイベントが発生し、次に status で がUPDATEREADY発生しupdatereadyます。

オフラインの場合、errorイベントが発生し、ステータスは になりますIDLE

オンライン/オフラインのステータスをテストできます

var online = navigator.onLine ? 'online' : 'offline';

動作しますが、仕様によると信頼性が低いとのことです。

さらに 3 つのことを完了する必要があります。

  • 私のマニフェストは cache.manifest という名前で、このように宣言されています<html manifest="cache.manifest">
  • 私の.htaccessにAddType text/cache-manifest manifestExpiresByType text/cache-manifest "access plus 0 seconds"
  • 私のアプリは<meta name="apple-mobile-web-app-capable" content="yes">

この API を使用すると、内部で何が起こっているかを簡単に理解できます。ただし、必ず独自のテストを行ってください。この結果を 100% 確信できるわけではありません。また、新しい iOS バージョンを使用することもできます。最大サイズについてさらにテストします。

于 2013-02-19T18:27:29.207 に答える