2014-06-26 16 views
5

Ora questo è venuto un bel po 'qui, quindi credo che sto cercando una spiegazione piuttosto che una soluzione (anche se sarebbe asso), ma il cache di back/forward di Safari è orribilmente avido .Safari ed è avido cache avido

Ho un problema in cui viene inviato un modulo, ma carica una finestra modale interstitial prima di passare alla pagina di azione del modulo. Su Safari la cache è così forte che il pulsante Indietro ha ancora l'accesso modale che sta rendendo la mia anima molto triste.

Sto tagliando l'area chiudendo il modal e quindi inviando il modulo. Sul retro il browser ha una modal semiaperta (è Bootstrap in modo che svanisca) che poi continua a sparire.

Ora so su onunload = "" ma l'aggiornamento della pagina sembra pazzesco. La cache è una buona cosa e qualcosa che vuoi, specialmente sui cellulari.

Credo che la mia domanda è:

Perché è così molto più intenso di dire Chrome e c'è comunque di forzare il browser per memorizzare nella cache uno stato invece solo l'ultimo Stato?

Grazie

+0

Non è possibile disattivare la dissolvenza prima di chiudere la modale e riattivarla quando la pagina viene nuovamente visualizzata? – CupawnTae

+0

Sì, è una specie di cosa sta succedendo. Ci sono alcune complicazioni della direttiva AngularJS. – SpaceBeers

risposta

3

Hah, avido è un eufemismo! Onestamente però, il 99% delle volte, il design caching dietro Safari è il modo ideale per gestire le transizioni di pagina su un dispositivo mobile.

Quando si va da pagina A a pagina B, e poi di nuovo a pagina A, non si vuole appesantire il dispositivo (larghezza di banda, la durata della batteria), con il recupero di risorse e beni, quando si può solo "in pausa" la stato tra le interazioni e quindi "continua" quando si torna indietro.

Questo è effettivamente ciò che fa Safari Mobile. Usano un concetto di Page Cache, che mantiene in memoria l'intera pagina, quando si naviga da uno all'altro. Ciò riduce la necessità di recuperare tali risorse e consente un'interazione scattante quando si fa clic indietro.

Questo è fantastico e tutto ... ma porta a problemi (come quello che hai richiamato) - In particolare, come fai a distinguere tra una pagina sospesa e una che avrebbe dovuto essere distrutta?

Per fortuna, WebKit fornisce un evento pageshow e pagehide che tocca Page Cache. Oltre a sparare quando la pagina mostra o nasconde (simile a onunload), ha la capacità di indicare se una pagina è stata persisted o inserita nella cache della pagina.

Anche se non è una soluzione perfetta, si potrebbe verificare l'evento pageshow per la persistenza, e quindi gestire il modale più direttamente (in quanto si sa che è stata memorizzata nella cache) come immediatamente nasconderlo.

Se non l'hai già, dare un'occhiata a questi due link qui:

https://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/ https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

Fanno un ottimo lavoro che spiega la pagina cache e comprendono esempi di codice della manifestazione pageshow e pagehide Ho fatto riferimento in precedenza.

Spero che questo aiuti!

+0

Davvero utile. Grazie. Risolto il mio problema ma in un brutto maniero. – SpaceBeers

Problemi correlati