modifica 2 giugno 2014: La dimensione massima della cache su iOS7.1 è 300Mb.
Un cliente mi ha fatto questa domanda precisa di recente, quindi ho studiato.
Come per IOS6 (tutti i miei test sono stati condotti su iOS6.1), si tratta di due cose diverse:
- un sito web utilizzando un manifest, cui si accede con il mobile Safari
- una webapp sulla schermata iniziale, creata dal sito web
Un sito Web con un .manifest può utilizzare fino a 50 MB di cache, con richiesta di autorizzazione dell'utente. Non può usare di più. Questo valore può essere trovato e cancellato nelle impostazioni/safari/avanzato. Se si tenta di aggiungere altro nella cache, un evento error
sarà attivato e lo window.applicationCache.status
diventerà IDLE.
Una webapp non condivide la stessa cache del suo sito web. Cancellare le impostazioni della cache/safari/advanced non farà nulla per la tua webapp della schermata principale. Accetterà più di 50mb di cache senza input dell'utente, ma non so esattamente quanto (ho provato con 60mb con successo, completamente accessibile offline. * Modifica: provato con 83mb, successo) Non so dove questo i dati possono essere visti nelle impostazioni di iOS. Immagino da nessuna parte.
Testare questo è stato un dolore nel *** fino a quando ho trovato il spec. C'è un'API che funziona perfettamente su iOS6.
Si dovrebbe controllare window.applicationCache.status
, che ti dice qual è lo stato di applicazione, ed i seguenti eventi (tagliare e incollare da mio codice, quindi con la loro ascoltatore):
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);
Tutti stanno lavorando su iOS 6.1, anche il progress
evento con event.loaded
e event.total
Una webapp inizia controllando, quindi spara noupdate
se il .manifest è lo stesso. Lo stato è IDLE
.
Se il manifest modificato, lo stato è DOWNLOADING
, i progress
generato l'evento per ogni file nel vostro manifesta, allora lo stato è UPDATEREADY
ei updateready
incendi.
Se sei offline, un evento error
si attiva e lo stato è IDLE
.
È possibile verificare lo stato online/offline con
var online = navigator.onLine ? 'online' : 'offline';
funziona, ma le specifiche dice che è inaffidabile.
più Tre cose per finire:
- mio manifesto è chiamato cache.manifest e dichiarato come questo
<html manifest="cache.manifest">
- mio .htaccess ha
AddType text/cache-manifest manifest
e ExpiresByType text/cache-manifest "access plus 0 seconds"
- mia app ha
<meta name="apple-mobile-web-app-capable" content="yes">
Con questa API, è più facile capire cosa sta succedendo sotto il cofano. Assicurati di fare il tuo test però, non sono sicuro al 100% di questi risultati o possono farlo con una nuova versione iOS. Verificherò ulteriormente per la dimensione massima.
Check this out: http://stackoverflow.com/questions/2772908/max-size-ipad-iphone-offline-application-cache – mattdlockyer