Je dois recharger une page à l'aide de JavaScript et veiller à ce qu'elle ne soit pas extraite du cache du navigateur, mais qu'elle recharge à la place la page à partir du serveur. [Comme des éléments de la page auront changé entre-temps]
Sur IE et FF, j'ai constaté que le code suivant fonctionnait correctement.
window.location.reload(true);
Cependant, cela ne fonctionne pas sur Chrome ou Safari.
J'ai essayé ce qui suit, mais aussi en vain;
window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
Y a-t-il une solution à ce problème?
Résultats
Après avoir examiné cette question, j'ai constaté qu'il s'agissait d'un problème lié à la gestion du protocole HTTP.
Pragma: no-cache
Last-Modified: DATE1
location.reload(true)
pour forcer un rechargement à partir du serveur, pas en cacheIf-Modified-Since: DATE1
HTTP Status 304 Not Modified
L’application serveur est responsable de ne pas avoir remarqué le changement d’état dans le contenu de la page dynamique et par conséquent de ne pas renvoyer un 200
. Toutefois, Chrome/WebKit est le seul navigateur à envoyer un champ If-Modified-Since
lorsque le JS location.reload(true)
est appelé. .
Je pensais mettre mes conclusions ici si quelqu'un d'autre rencontrait le même problème.
Vous pouvez utiliser ce hack:
$.ajax({
url: window.location.href,
headers: {
"Pragma": "no-cache",
"Expires": -1,
"Cache-Control": "no-cache"
}
}).done(function () {
window.location.reload(true);
});
Pour vous assurer que la page n'est pas chargée à partir du cache, vous pouvez ajouter un numéro unique à interroger:
window.location = location.href + '?upd=' + 123456;
Vous pouvez également utiliser la date au lieu de 123456
De grandes découvertes! Je viens de rencontrer le même problème et cela aide beaucoup! Cependant, en plus de votre conclusion, il semble que Chrome envoie toujours une requête GET pour location.reload () ... IE/FF répète la même chose. dernière demande à la place.
Voici ce que je fais pour assurer le rechargement forcé de mon fichier d'application sur chrome:
var oAjax = new XMLHttpRequest;
oAjax.open( 'get', '/path/to/my/app.js' );
oAjax.setRequestHeader( 'Pragma', 'no-cache' );
oAjax.send();
oAjax.onreadystatechange = function() {
if( oAjax.readyState === 4 ) {
self.location.reload();
}
}
Essayez window.location = window.location