Una volta che un documento HTML ha un manifesto (cache.manifest), come si può rimuoverlo?

StackOverflow https://stackoverflow.com/questions/4542299

  •  13-10-2019
  •  | 
  •  

Domanda

Sembra che una volta che hai una voce di manifesti, a la:

<html manifest="cache.manifest">

Poi quella pagina (la voce principale nella cache) sarà sempre memorizzato nella cache (almeno da Safari) finché l'utente non fa qualcosa per eliminare la cache, anche se successivamente rimuovere l'attributo manifesta dal tag html e aggiornare il manifesto (cambiando qualcosa al suo interno), costringendo l'ingresso principale per essere ricaricati con tutto il resto.

In altre parole, se si dispone di:

  • index.html (con manifesti definito)
  • file1.js (riferimento nel manifesto)
  • file2.js (riferimento nel manifesto)
  • cache.manifest (elenca i due js file)

- rimuovere la voce manifesta da index.html e modificando il manifesto (in modo che viene scaduto dal browser e tutti i contenuti ricaricato) non si fermerà questa pagina di comportarsi come se fosse ancora completamente nella cache. Se si visualizza sorgente sul index.html non si vedrà il manifesto più quotata, ma il browser sarà comunque richiedere solo il file cache.manifest, ea meno che il contenuto di quel file viene modificato, senza altre modifiche a qualsiasi file verrà mostrato al utente.

Sembra un bug abbastanza lampante, ed è presente su iOS così come le versioni Mac di Safari. Qualcuno ha trovato un modo di resettare pagina e sbarazzarsi di cache senza richiedere l'intervento dell'utente?

È stato utile?

Soluzione

Ive stata la ricerca la stessa domanda, e doesnt sembrano essere un'API per:

  1. grilletto in modo dinamico che una pagina viene memorizzata nella cache
  2. dinamicamente causa di una pagina di smettere di essere memorizzata nella cache.

Ecco le migliori risorse che ho trovato:

http://www.html5rocks.com/tutorials/appcache/beginner/

http://www.thecssninja.com/javascript/how

offline-webapps-on-the-iphone-to-create-

In particolare, questa citazione dal primo link:

Se il file manifesto o una risorsa specificata in esso non riesce a scaricare l'intero aggiornamento non riesce. Il browser continuerà ad utilizzare la vecchia cache dell'applicazione in caso di legittimo impedimento a.

In caso contrario, non v'è alcuna menzione circa ovunque lo scarico della cache.

sembra suggerire che non puoi forzare un errore per farlo rimozione dati dalla cache. Tuttavia, come indicato di seguito, le specifiche suggerisce che se si verifica un errore durante il download del file manifesto, verrà rimosso l'intera cache.

In Google Chrome, l'utente può accedere al seguente URL:

chrome: // AppCache-internals /

e disattivare manualmente la cache. Naturalmente, la prossima volta che visita la pagina, verrà recached se la pagina ha l'insieme di proprietà manifesto.

Se si guarda la specifica: 5.6 Offline Web

E 'sembra suggerire una situazione in cui viene rimossa la cache. In particolare, la sezione 5.6.4.5:

Se il recupero manifesto fallisce a causa di un 404 o 410 risposta o equivalente, quindi eseguire queste sottofasi: gruppo di cache marcare come obsoleti. Questo gruppo di cache non esiste più per scopi diversi dalla lavorazione di oggetti documento già associato a un cache dell'applicazione nel gruppo cache. Se gruppo di cache ha una cache dell'applicazione cui bandiera completezza è incompleta, poi scarta quella cache dell'applicazione.

E poi dice:

Se questo fosse un tentativo cache, gruppo di cache scarto del tutto.

In sostanza, se la richiesta per la cache dei file risultati manifestarsi in 404, quindi l'intera cache deve essere eliminata. Quindi, hai cercato di avere il server restituisce un 404 o 410 quando viene richiesto il file di cache manifest? Che dovrebbe funzionare. Il trucco è quello di restituire solo il 404/410 per le pagine che si desidera rimuovere il manifesto da (magari utilizzando parametri URL?).

Altri suggerimenti

Una possibile soluzione:

  • modificare il manifesto (in modo che ricarica)
  • modificare il file master (index.html) per fare riferimento a una manifesta inesistente, quindi diventa un 404

Quasi elegante, ma sembra funzionare. Il problema principale è allora che sei bloccato con questo 404-generazione di ingresso manifestano falso fino a quando tutti che sia mai stato al tuo sito è tornato e aveva la cache cancellata.

Ci ha avuto modo di essere un modo migliore ...

Cerca di eliminare semplicemente il file manifesto. Dalla documentazione Mozzila:

cache applicazione può anche diventare obsoleti. Se il manifesto viene rimosso dal server, il browser rimuove tutte le cache di applicazione che l'uso che si manifestano, quindi invia un evento "obsoleto" per l'oggetto cache dell'applicazione. Poi lo stato del cache dell'applicazione è impostato su obsoleto.

Anche questo ha funzionato per me su Chrome.

Una soluzione, se si utilizza IIS 7 è quello di rimuovere il tipo MIME per il manifest o .appcache tipo di file che è stato aggiunto per consentire la memorizzazione nella cache. È sempre possibile aggiungere questo indietro quando si desidera attivare di nuovo la cache. Questo è quello che ho fatto per risolvere il mio.

Quello che facciamo è cancellare l'elenco dei file nel manifesto, modo che si distingue file di NO verrà memorizzata nella cache.

Si lavora per noi.

Questo potrebbe essere vecchio, ma si spera ancora utile a qualcuno.

Date un'occhiata al vostro intestazioni HTTP nelle proprietà di IIS. Date un'occhiata a abilitando o disabilitando la scadenza del contenuto. Potrebbe essere che IIS sta ancora facendo la cache.

Per gli scopi di sviluppo (cambiamenti costanti), ciò che abbiamo fatto è:

  1. Imposta un -cache manifesta file- sotto il vostro linguaggio server-side, per esempio, usiamo PHP, quindi il nostro cache di sviluppo si chiama "cache.manifest.php" ed è indicato questo stesso modo nel tag html in questo modo:

    <html manifest="cache.manifest.php">
    
  2. Metti un po 'di stringa dependent- -time (o qualcosa d'altro che suite voi) qualche parte nel manifestarsi come un commento (# ---), in modo che il file è diverso ogni tanto un po' (i browser sembrano confrontare di manifesti contenuto, non data), per esempio modifica questa stringa il manifesto ogni minuto, in questo modo tutti i file sarebbero ri-memorizzato nella cache se la visita è in un minuto diverso, come l'ultima volta.

    <?php if($dev) echo date("Y-m-d H:m"); ?>
    

Abbiamo appena testato questa procedura utilizzando Chrome, spero che funziona in altri, ma se non i vostri commenti e suggerimenti sarebbero molto apprezzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top