2013-02-14 16 views
6

Sto costruendo un'app Web appositamente per l'iPad (con iOS 6+) che mostra la collezione di prodotti di un'azienda.Qual è la dimensione massima della cache per le app Web iOS6 e come posso estenderla?

Tutto ha funzionato perfettamente utilizzando il file "cache.manifest" di HTML5. Ma dal momento che la cache è cresciuta fino a circa 50 MB, l'iPad non sta più salvando i dati dell'applicazione. Invece di 50 MB la dimensione della cache è ora di 0,1 KB in base alle impostazioni di Safari.

Quindi qual è il limite effettivo della cache di Safari per un'app Web e c'è un modo per ingrandire l'importo massimo della cache dell'applicazione?

+0

Check this out: http://stackoverflow.com/questions/2772908/max-size-ipad-iphone-offline-application-cache – mattdlockyer

risposta

12

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.

+0

Grazie per la spiegazione chiara! Ho intenzione di provarlo più tardi oggi o domani. – Jules

+0

Sembra che l'applicazione Web (quando si trova nella schermata iniziale) stia effettuando la cache solo una seconda volta. La prima volta che si è verificato l'errore, la seconda volta che l'evento memorizzato nella cache è stato attivato correttamente! Grazie per l'aiuto. – Jules

Problemi correlati