2012-09-20 17 views
7

ho una cache manifesta con un commento in essoHTML5 App Cache: Manifest ist aggiornati, ma i file sono prese dai AppCache ancora una volta

# Version 3.2 

al fine di aggiornare tutte le applicazioni Mi è sufficiente modificare il numero di versione. Funziona, ma:

Quando aggiorno il file manifest, tutto viene aggiornato correttamente (la nuova cache è piena) ma i file effettivi vengono prelevati ancora UNA volta dalla (vecchia) cache. quando ricarico due volte tutto è aggiornato. Questo comportamento è corretto? Utilizzando Chrome 21.

Grazie

risposta

16

Sì, questo è l'attuale comportamento "corretto". Questo è ciò che accade:

Quando hai appena fatto modifiche al file manifesto, e si aggiorna il browser, questo è ciò che accade (supponendo che sei online)

  • del suo navigatore primi carichi posteriori tutti i file nella cache
  • poi il controllo del browser online per il file manifesto
  • rileva che il file manifesto è cambiato, sarà poi procedere per scaricare i nuovi file
  • tuttavia, tenere a mente, in questo momento, è continuerà a guardare i tuoi 'vecchi file' perché il browser ha caricato i vecchi file prima di andare online per scaricare i 'nuovi files'
  • se a questo punto, se si ha colpito aggiornare di nuovo (2 ° tempo), si dovrebbe ottenere i 'nuovi files'

Questo è attualmente il comportamento standard. Alcune persone mettono alcuni gestori di eventi per richiedere all'utente di fare un altro aggiornamento (dopo il primo aggiornamento)

Personalmente, penso che il browser dovrebbe essere responsabile di avvisare l'utente di fare un altro aggiornamento dopo aver scaricato i nuovi file, ma giusto ora, la maggior parte delle persone inserisce gestori di eventi dalla "window.applicationCache" per generare eventi che aiutino a gestirlo.

di guardare un esempio di utilizzo window.applicationCache, entra qui: http://www.html5rocks.com/en/tutorials/appcache/beginner/

E 'sotto la sezione "Aggiornamento della Cache".

1

E 'possibile scambiare istantaneamente la cache come descritto here:

function updateSite(event) { 
    window.applicationCache.swapCache(); 
} 
window.applicationCache.addEventListener('updateready', updateSite, false);