run - Forzar una recarga de la página en Chrome usando Javascript
javascript must be enabled to continue chrome (5)
¡Grandes descubrimientos! Me acabo de encontrar el mismo problema y esto realmente ayuda mucho! Sin embargo, además de su descubrimiento, parece que Chrome siempre envía una solicitud GET para location.reload () ... IE / FF está repitiendo la última solicitud en su lugar.
Necesito volver a cargar una página con JavaScript y asegurarme de que no se extraiga de la memoria caché del navegador, sino que se vuelva a cargar desde el servidor. [Como los elementos de la página habrán cambiado en el ínterin]
En IE y FF encontré que el siguiente código funcionó bien;
window.location.reload(true);
Sin embargo, no funciona en Chrome o Safari.
Intenté lo siguiente, pero también en vano;
window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
¿Hay una solución a este problema?
Recomendaciones
Después de ver esto, he encontrado que este problema es el manejo del Protocolo HTTP;
- Chrome envía una solicitud con
Pragma: no-cache
campo HTTPPragma: no-cache
- El servidor responde con el campo
Last-Modified: DATE1
- JS usa
location.reload(true)
para forzar una recarga desde el servidor no al caché - Chrome envía una solicitud con el campo
If-Modified-Since: DATE1
- El servidor responde con
HTTP Status 304 Not Modified
La aplicación del servidor tiene la culpa de no darse cuenta del cambio de estado en el contenido dinámico de la página y, por lo tanto, de no devolver un 200
. Sin embargo, Chrome / WebKit es el único navegador que envía un campo If-Modified-Since
cuando se llama a JS location.reload(true)
.
Pensé que pondría mis hallazgos aquí en caso de que alguien más encuentre el mismo problema.
Esto es lo que hago para garantizar que mi archivo de aplicación se vuelva a cargar en 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();
}
}
Para asegurarse de que la página no esté cargada desde la memoria caché, puede agregar un número único para consultar:
window.location = location.href + ''?upd='' + 123456;
También puedes usar la fecha en lugar de 123456
Prueba window.location = window.location
Puedes usar este truco:
$.ajax({
url: window.location.href,
headers: {
"Pragma": "no-cache",
"Expires": -1,
"Cache-Control": "no-cache"
}
}).done(function () {
window.location.reload(true);
});