2010-08-21 18 views
19

¿Cómo se hace para que Firefox vuelva a ejecutar javascript y vuelva a cargar toda la página cuando el usuario presiona el botón Atrás? Yo era capaz de hacer esto en todos los navegadores excepto Firefox de la ayuda de otra cuestión de forma añadiendo este código:Force Firefox para volver a cargar la página en el botón Atrás

history.navigationMode = 'compatible'; 
$("body").unload(function(){}) 

Y también la adición de un marco flotante ... Pero esto no funciona en Firefox. ¿Hay algo que hacer?

Respuesta

7

agregar este entre sus etiquetas HEAD

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
+12

Nota: esta solución no funciona. Al menos no en Chrome y Firefox recientes. –

+0

En cuanto a por qué no funciona: http://stackoverflow.com/questions/10314174/difference-between-pragma-and-cache-control-headers – thomas88wp

1

Se podría utilizar esa secuencia de comandos que se pueden encontrar aquí:

http://www.easy-coding.de/wiki/html-ajax-und-co/onload-event-cross-browser-kompatibler-domcontentloaded.html#headline9

Demostración: http://demo.easy-coding.de/javascript/onload-event-cross-browser/

Fuente: http://www.easy-coding.de/wiki/html-ajax-und-co/onload-event-cross-browser-kompatibler-domcontentloaded.html#headline8

Este script se encuentra bajo licencia MIT/GPL libre de utilizar .

De lo contrario podría utilizar el evento DOM Gecko-específica: DOMContentLoaded

+0

El segundo enlace (la demostración) está bloqueado. –

+0

Como no es mi demo, no hay nada que pueda hacer ... – gearsdigital

+0

Como todos los enlaces están rotos ahora, la respuesta es bastante inútil. Es por eso que siempre debe citar las partes relevantes de sus fuentes, no solo publicar enlaces. – Basti

3

Como referencia, que la propiedad navigationMode sólo se aplica a la ópera, es sólo que IE y los navegadores Webkit ya tienen el comportamiento que el interlocutor quería.

IE y Webkit hacen lo que Opera llamaría navegación "compatible". Firefox hace lo que Opera llamaría navegación "rápida". Pero es solo en Opera que este comportamiento es realmente controlable.

0

Nada de esto funcionó para mí. Lo hago a través de la comprobación de cookies: importo jsp (fuente a continuación) en la parte principal de la página, y luego llamo a refreshOnBack.

<%@ page import="java.util.UUID" %> 
<script> 
    var REFRESH_PAGE_COOKIE_NAME="refreshPage_"; 
    var PAGE_REFRESH_GUID = "<%out.print(UUID.randomUUID().toString());%>"; 
    /* To force refresh of page when user or javascript clicks "back", 
    * put call to this method in body onload function - NOT THROUGH JQUERY 
    * as jquery onload is not called on history back. 
    * In must be done via <BODY onload="..."> 
    */ 
    function refreshOnBack(){ 
     //Alghoritm uses cookies to check if page was already loaded. 
     //Cookies expiration time is not set - will be gone after browser restart. 
     //Alghoritm: 
     //is cookie set? 
     // -YES - reload; 
     // -NO - set it up; 
     //Cookie contains unique guid in name so that when page is regenerated - it will not reload. 
     var cookieName = REFRESH_PAGE_COOKIE_NAME + PAGE_REFRESH_GUID; 
     if(getCookie(cookieName)=="Y"){ 
      window.location.reload(); 
     } else { 
      setCookie(cookieName,"Y"); 
     } 
    } 
</script> 
+0

¿cómo se llama a refreshOnBack? –

6

En mi caso, después de que el usuario final Publica sus datos nuevos en el servidor, se lo redirige a otra página. Pero cuando el usuario final presiona el botón Atrás, el formulario se rellena previamente con los datos anteriores. Entonces, la página de recarga es necesaria.

Hice una solución para Firefox y otra para Google Chrome. Tienen un comportamiento diferente para mostrar páginas en caché.

Esto evitará que Firefox guarde en caché la página y el botón Atrás traerá la página del servidor.

window.onunload = function(){}; 

Pero Google Chrome lo hizo de otra manera y la solución anterior no funcionó para mí. Así que hice otra solución para Chrome. Hice una bandera que marcó el formulario como sucio.

En la parte superior de <head>, antes que cualquier carga, puedo comprobar la cookie

if(document.cookie.match(/my-form=dirty/)) { 
    document.cookie = "my-form=; expires=-1; path="+document.location.pathname; 
    window.location.reload(); 
} 

Con una ayuda de jQuery, escribo la cookie cuando el usuario modifique algo

$(document).load(function(){ 
    $(':input').change(function(){ 
    document.cookie = "my-form=dirty; expires=86400000; path="+document.location.pathname; 
    }) 
}) 

bueno saber:

+0

window.onunload = function() {} trabajado para mí junto con Angular. Agregar metaetiquetas como en la respuesta anterior no. – eeejay

0

Creo que la respuesta es posible que desee está aquí: https://stackoverflow.com/a/5493543/1475148

TLDR: HTTPS + Cache-Control: must-revalidate como una cabecera + cabecera enviados por el servidor Expires encuentra en el pasado deben hacer que funcione. He aquí un ejemplo de implementación de PHP:

<?php 

$expires = gmdate('D, d M Y H:i:s', time() - 1); 

header('Cache-Control: must-revalidate'); 
header("Expires: {$expires} GMT"); 

?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Auto-reloading page</title> 
    </head> 
    <body> 
     <p>The current day is <?php echo date('d, F Y'); ?> and the time is <?php echo date('H:i:s'); ?>.</p> 
     <p><a href="http://google.com">Click away</a></p> 
    </body> 
</html> 
+0

No funciona en FF 18.0.2 –

0

Si su uso de C# .NET, puede manejar la situación en la carga de la página de inicio o evento mediante programación

Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.VaryByParams["*"] = true; 

Para obtener más información, echa un vistazo a Response.Cache en MSDN : http://msdn.microsoft.com/en-us/library/system.web.httpresponse.cache(v=vs.110).aspx

4

Esta solución funcionó para mí (y yo creo que es un poco más simple que otras soluciones sugeridas):

$(window).bind('pageshow', function() { 
     // This event is called only by FireFox. Because Firefox doesn't reload the page when the user uses the back button, 
     // or when we call history.go.back(), we need to force the reload for the applicatino to work similar to Chrome and IE (11 at least). 

     // Doc: https://developer.mozilla.org/en-US/docs/Listening_to_events_in_Firefox_extensions 
     location.reload(); 
    }); 

Llamo este código en cada carga de página, si el navegador es FireFox. (Para saber si el navegador que se está ejecutando actualmente es Firefox, consulte here).

+0

Yo trabajo ;-) Gracias – jobima

Cuestiones relacionadas