Aggiorna iFrame (problema cache)

Stiamo avendo uno strano problema su cui non siamo sicuri di cosa lo causano esattamente. Lasciatemi elaborare il problema. Supponiamo, abbiamo due diverse pagine html a.html e b.html. E un piccolo script scritto in index.html:

   function reloadFrame(iframe, src) { iframe.src = src; }    

Un componente server aggiorna continuamente entrambi i file a.html e b.html. Il problema è che il contenuto di entrambi i file si sta aggiornando con successo sul lato server. Se apriamo, possiamo vedere le modifiche aggiornate, ma il client ottiene il contenuto precedente che non mostra le modifiche aggiornate.

Qualche idea?

Aggiungi questo in a.html e b.html

      

Per forzare nessun controllo della cache

Se è ansible aggiungere istruzioni sul lato server a tali file HTML, è ansible inviare le intestazioni appropriate per impedire la memorizzazione nella cache:

Assicurarsi che una pagina web non sia memorizzata nella cache, su tutti i browser (penso che il consenso sia che la seconda risposta è la migliore, non quella accettata)

La risposta di Simone ha già a che fare con i meta tag.

Un trucco rapido economico consiste nell’aggiungere un numero casuale come parametro GET:

 page_1.html?time=102398405820 

se questo cambia ad ogni richiesta (es. usando l’ora corrente), ricaricando si impone anche ogni volta.

Prova qualcosa come il seguente:

  

Ciò costringerà l’iframe a essere ricaricato anche se è stato memorizzato nella cache dal browser

La soluzione di Homero Barbosa ha funzionato come un fascino. Nel mio caso, ho avuto un numero variabile di iframe nella pagina, quindi ho fatto quanto segue:

 $('.some_selector').each(function () { var $randid = Math.floor(Math.random() * 101); $(this).attr({'id': 'goinOnaSafari-' + $randid}); var $frame = document.getElementById('goinOnaSafari-' + $randid); $frame.contentWindow.location.href = $frame.src; }); 

Per una ansible soluzione a questo, passa un “parametro cache” alle chiamate a a.html e b.html. Per esempio

HTML

  

Javascript

 function cacheSafeReload(urlBase) { var cacheParamValue = (new Date()).getTime(); var url = urlBase + "?cache=" + cacheParamValue; reloadFrame(document.getElementById('myFrame'), url); }