javascript - net - deshabilitar retroceso jquery
Recargue el sitio cuando se acceda mediante el botón de retroceso del navegador (10)
¿Te ayuda?
Vuelve a cargar la página pulsando el botón Atrás.
O con etiquetas meta,
<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache -->
<meta http-equiv="expires" content="0"> <!-- says that the cache expires ''now'' -->
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any -->
No estoy seguro, el meta ayudará, pero puedes probarlo.
Problema: tengo un sitio con contenido dinámico que se debe volver a cargar cada vez que el usuario lo vea. Esto incluye el caso de uso cuando un usuario pulsa el botón de retroceso en otro sitio y llega al sitio necesario para ser recargado. La mayoría de los navegadores (¿todos?) No actualizan el sitio después de este evento.
Mi solución (que no funciona del todo): http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript
window.onbeforeunload = function () {
// This function does nothing. It won''t spawn a confirmation dialog
// But it will ensure that the page is not cached by the browser.
}
Pero todavía no actualiza la página.
¿Alguna idea de qué puede afectar / bloquear el comportamiento deseado? ¿Respetuosamente alguna otra sugerencia de solución para este problema?
editar:
Establecer lo siguiente:
Cache-Control private, must-revalidate, max-age=0
Expires Sat, 26 Jul 1997 05:00:00 GMT
Pragma no-cache
y:
<meta name="cache-control" content="no-cache" />
<meta name="expires" content="0" />
<meta name="pragma" content="no-cache" />
Todavía no hay éxito.
Creo que esta pregunta te ayudará.
[edit (Nickolay): he aquí por qué funciona de esa manera: webkit.org, developer.mozilla.org. Lea esos artículos (o mi resumen en una respuesta por separado a continuación) y considere si realmente necesita hacer esto y haga que la carga de su página sea más lenta para sus usuarios.]
La respuesta de Nickolay
Creo que necesitas exactamente recargar - window.location.reload()
. Pero el problema principal es la solución simple de navegador cruzado. Código en PHP:
$inline_javascript = ''var uniqueString = '' . time() . '';'' .
''if (uniqueString === window.name) {'' .
'' window.location.relace();'' .
''} else {'' .
'' window.name = uniqueString;'' .
''}'';
E imprímelo antes de los archivos css y js en el archivo.
Debe utilizar una input
oculta como indicador de actualización, con un valor de "no":
<input type="hidden" id="refresh" value="no">
Ahora usando jQuery, puedes verificar su valor:
$(document).ready(function(e) {
var $input = $(''#refresh'');
$input.val() == ''yes'' ? location.reload(true) : $input.val(''yes'');
});
Cuando hace clic en el botón Atrás, los valores en los campos ocultos conservan el mismo valor que cuando dejó la página originalmente.
Así que la primera vez que cargue la página, el valor de la entrada será "no". Cuando regrese a la página, será "sí" y su código de JavaScript activará una actualización.
Después de probar varias soluciones diferentes, descubrí que la API de sincronización de navegación de JavaScript funciona mejor para detectar interacciones con el botón Atrás.
Todo lo que tienes que hacer es esto:
if(!!window.performance && window.performance.navigation.type == 2)
{
window.location.reload();
}
Y funciona bien con todos los principales navegadores: http://caniuse.com/#search=Navigation%20Timing%20API
Encontré una solución: no-store
agregar no-store
al encabezado de Cache-Control
. Lo hice en los encabezados http, pero creo que también podría funcionar con etiquetas meta. Probado en Chromium y Firefox.
Consulte también Cómo evitar que Chrome deje de almacenar en caché.
Prueba esto :
header("Cache-Control: no-store, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
// Una fecha en el pasado
Puede usar el evento window.onpageshow
para probar si la página proviene de la memoria caché.
window.onpageshow = function (event) {
if (event.persisted) {
window.location.reload(); //reload page if it has been loaded from cache
}
};
Tenga en cuenta que esto requiere navegadores más modernos que algunas de las respuestas anteriores (como IE11 +). Para más información sobre el soporte del navegador, vea here
Puedes usar este código en un módulo personalizado:
<?php
/**
* Implements hook_init().
*/
function MY_MODULE_init() {
drupal_add_http_header(''Cache-Control'', ''no-cache, no-store, max-age=0, must-revalidate, post-check=0, pre-check=0'');
}
?>
esto funcionó para mí, en drupal 7 (php) cada vez que un usuario cierra la sesión, puede presionar el botón Atrás y puede visitar las páginas privilegiadas. Si se actualiza una página, se le envía a una página de inicio donde no puede hacer nada.
<?php
//refresh the page after log-out and back button
if (!user_is_logged_in())
{
print ''<input type="hidden" id="refreshed" value="no">
<script type="text/javascript">
onload=function(){
var e=document.getElementById("refreshed");
if(e.value=="no")e.value="yes";
else{e.value="no";location.reload();}
}
</script>'';
}
?>
alguien publicado here : gracias espero que te ayude también.