habilitar - enable javascript internet explorer 11
window.location.reload con claro caché (6)
En mi caso, reload () no funciona porque asp.net controla el comportamiento. Por lo tanto, para resolver este problema, he usado este enfoque, a pesar de que parece ser una solución alternativa.
self.clear = function () {
//location.reload(true); Doesn''t work to IE neither Firefox;
//also, hash tags must be removed or no postback will occur.
window.location.href = window.location.href.replace(/#.*$/, '''');
};
Esta pregunta ya tiene una respuesta aquí:
- Actualización de JavaScript de la página actual 1 respuesta
Quiero volver a cargar una página usando JavaScript, pero también quiero borrar la caché, por lo que al actualizar la página la página tiene las últimas versiones de todo, desde el servidor.
Otros navegadores, excepto IE, no obtienen el último contenido.
¿Alguna solución para IE9?
Escribí este script de JavaScript y lo incluí en el encabezado (antes de que todo se cargue). Parece funcionar. Si la página se cargó hace más de una hora o la situación no está definida, volverá a cargar todo desde el servidor. El tiempo de una hora = 3600000 milisegundos se puede cambiar en la siguiente línea: if (alter> 3600000)
Con respecto, Birke
<script type="text/javascript">
//<![CDATA[
function zeit()
{
if(document.cookie)
{
a = document.cookie;
cookiewert = "";
while(a.length > 0)
{
cookiename = a.substring(0,a.indexOf(''=''));
if(cookiename == "zeitstempel")
{
cookiewert = a.substring(a.indexOf(''='')+1,a.indexOf('';''));
break;
}
a = a.substring(a.indexOf(cookiewert)+cookiewert.length+1,a.length);
}
if(cookiewert.length > 0)
{
alter = new Date().getTime() - cookiewert;
if(alter > 3600000)
{
document.cookie = "zeitstempel=" + new Date().getTime() + ";";
location.reload(true);
}
else
{
return;
}
}
else
{
document.cookie = "zeitstempel=" + new Date().getTime() + ";";
location.reload(true);
}
}
else
{
document.cookie = "zeitstempel=" + new Date().getTime() + ";";
location.reload(true);
}
}
zeit();
//]]>
</script>
Puedes hacer esto de varias maneras. Una, simplemente agrega esta metaetiqueta a tu head
:
<meta http-equiv="Cache-control" content="no-cache">
Si quieres asegurarte de que las cosas que ya se almacenaron en caché se borren, también la metaetiqueta de expires
debería funcionar para eliminarla, configurándola en -1
ejemplo:
<meta http-equiv="Expires" content="-1">
http://www.metatags.org/meta_http_equiv_cache_control
Además, IE debería darle el último contenido para la página principal. Si tiene problemas con documentos externos, como CSS y JS, agregue un parámetro ficticio al final de sus URL con la hora actual en milisegundos para que nunca vuelva a ser el mismo. De esta forma, IE y otros navegadores SIEMPRE le servirán la última versión. Aquí hay un ejemplo:
<script src="mysite.com/js/myscript.js?12345">
--ACTUALIZAR--
Después de leer los comentarios, me di cuenta de que quería borrar programáticamente el caché y no siempre. Lo que podrías hacer es tener una función en JS como:
eraseCache(){
window.location = window.location.href+''?eraseCache=true'';
}
Luego, en PHP digamos, haces algo como esto:
<head>
<?php
$cache = '''';
if(isset($_GET[''eraseCache''])){
echo ''<meta http-equiv="Cache-control" content="no-cache">'';
echo ''<meta http-equiv="Expires" content="-1">'';
$cache = ''?''.time();
}
?>
<!-- ... other head HTML -->
<script src="mysite.com/js/script.js<?= $cache ?>"
</head>
Esto no está probado, pero debería funcionar. Básicamente, su función JS, si se invoca, volverá a cargar la página, pero agregará un parámetro GET al final de la URL. Su sitio tendrá un código de back-end que busque este parámetro. Si existe, agrega las metaetiquetas y una varilla de caché que contiene una marca de tiempo y la agrega a las secuencias de comandos y CSS con los que tiene problemas de almacenamiento en la memoria caché.
--UPDATE 2--
La metaetiqueta de hecho no borrará el caché ON LOAD. Entonces, técnicamente debe ejecutar la función borrarCache en JS, una vez que la página se carga, debe cargarla OTRA VEZ para que se realicen los cambios. Debería poder arreglar esto con su lenguaje del lado del servidor. Puede ejecutar el mismo comando eraseCache JS, pero en lugar de agregar las metaetiquetas, ejecute esto en la parte superior de la página:
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
?>
<!-- Here you''d start your page... -->
De esta manera funciona porque borra la memoria caché antes de que la página se cargue y antes de que se ejecute nada.
tuve este problema y lo solucioné usando javascript
location.reload(true);
también puedes usar
window.history.forward(1);
para detener el botón de retroceso del navegador después de que el usuario cierra la sesión de la aplicación.
Cache.delete() también se puede usar para borrar el caché de los últimos navegadores Chrome, Firefox y Opera.
reload()
se supone que acepta un argumento que le dice que haga una recarga dura, es decir, ignorando el caché:
location.reload(true);
No puedo garantizar su fiabilidad, es posible que desee investigar más a fondo.