2014 年 6 月 2 日編集: iOS7.1 の最大キャッシュ サイズは 300Mb です。
最近、クライアントからこの正確な質問があったので、調査しました。
IOS6によると(私のテストはすべて iOS6.1 で行われました)、これらは 2 つの異なるものです。
- モバイル Safari でアクセスする .manifest を使用する Web サイト
- ウェブサイトから作成された、ホーム画面上のウェブアプリ
.manifest を使用する Web サイトは、ユーザーの許可を求めることで、最大 50 MB のキャッシュを使用できます。それ以上は使えません。この値は、設定/サファリ/詳細で見つけてクリアできます。キャッシュにさらに詰め込もうとすると、error
イベントが発生し、window.applicationCache.status
IDLE になります。
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 で動作していますprogress
。event.loaded
event.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 manifest
はExpiresByType text/cache-manifest "access plus 0 seconds"
- 私のアプリは
<meta name="apple-mobile-web-app-capable" content="yes">
この API を使用すると、内部で何が起こっているかを簡単に理解できます。ただし、必ず独自のテストを行ってください。この結果を 100% 確信できるわけではありません。また、新しい iOS バージョンを使用することもできます。最大サイズについてさらにテストします。