2012-02-24 21 views
14

Estoy creando una aplicación en un entorno en el que estoy restringido a utilizar el sistema de archivos local y un navegador (es decir, ejecutar un servidor no es una opción). Tengo un enlace genérico para "volver atrás" en numerosas páginas que principalmente solo llama al history.back(). Se ve algo como lo siguiente:¿Puedo hacer que la función history.back() funcione en Chrome cuando se usa el protocolo file: //?

function goBack(evt) { 
    // Check to see if override is needed here 

    // If no override needed, call history.back() 
    history.back(); 
} 

$('#my-back-button').click(goBack); 

Este código funciona bien en Firefox y IE6 (no preguntar), pero falla en Chrome. ¿Alguna sugerencia sobre por qué y/o posibles soluciones?

También he intentado history.go(-1); que tampoco funciona.

+0

Por qué algunas búsquedas en Google sobre "botón parte posterior del cromo no funciona" esto podría ser un error del navegador, el código está muy bien. Enviaría un informe a Google. –

+0

@MikeL. Gracias por la sugerencia, pero googlear el problema ha demostrado ser improductivo. ¿Hay alguna forma de confirmar que esto es un error real? –

Respuesta

21

Por alguna razón en cromo, hay que añadir return false después de llamar history.go (-1)

Cambiar la función para:

function goBack(evt) { 
// Check to see if override is needed here 

// If no override needed, call history.back() 
history.go(-1); 
return false; 
} 
+0

Gracias. Eso funciono. ¿Alguna idea de por qué esto podría ser? –

+0

Esa es la forma correcta de hacerlo, por lo que aparentemente Google te obliga a hacerlo de la manera correcta. –

2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Untitled Document</title> 
</head> 
<body> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    function goBack(evt) { 
    // Check to see if override is needed here 

    // If no override needed, call history.back() 
    history.back(); 
    $('#my-back-button').forwardEvent('click'); 
} 

$('#my-back-button').click(goBack); 

/** 
* chrome workaround for triggering click events 
* @param {event} event event 
* @return {undefined} Returns undefined 
*/ 
    $.fn.forwardEvent = function(event) { 
     this.each(function() { 
      if (this.dispatchEvent) { 
       if (event.originalEvent) { 
        event = event.originalEvent 
       } 
       try { 
        this.dispatchEvent(event); 
       } catch(error) { 
        $(this).trigger(event); 
       } 
      } 
      else { 
       $(this).trigger(event); 
      } 
     }); 
     return this; 
    }; 
}); 
</script> 
<input type="button" value="<<<<" id="my-back-button"> 
</body> 
</html> 
+0

Hmmm. Lo siento, pero esto parece crear una recursión infinita. El problema no es el $ ('# my-back-button') que no recibe el evento click, sino que history.back() no hace nada. –

+0

Bueno, lo he probado en Chrome vs. Tu código original, y funciona. Con el protocolo "file: ///", etc. ¿No funcionó para usted? – heliogabal

+0

Ok, falla épica aquí, porque de todos modos funciona para mí, sin reenvío de eventos ... ¿Podrían pegar el código exacto de la página utilizada para las pruebas? Despojado de cosas innecesarias, por supuesto, mínimo. – heliogabal

0

para Chrome utilizar por debajo de código:

<a href="#" onclick="javascript:history.go(-1);return false;" style="text-decoration:underline;">Back</a> 

Sólo este código va a funcionar ..

Espero que ayude ... Happy coding .. :)

+0

En general, usar "onclick" (y similar) para establecer manejadores de eventos se considera una mala práctica. Consulte: http://stackoverflow.com/questions/5871640/why-is-using-onclick-in-html-a-bad-practice, para obtener más información. –

0

var referente = document.referrer; window.location.replace (referente);

Utilice esta va a trabajar

Cuestiones relacionadas