2012-08-07 23 views
8

Hice una función simple que hace que todos los contenedores se comporten como un enlace (elemento "a").El botón Atrás falla después de window.location.replace (href);

function allHot(element){ 
$(element) 
.click(
    function(){ 
    var href = $(this).find('a').attr('href'); 
    window.location.replace(href); 
}) 

.hover(
    function(){ 
    $(this).css({'text-shadow' : '0px 1px 0px #D6D6D6'}); 
    }, 
    function(){ 
    $(this).css({'text-shadow' : 'none'}); 
    } 

); 
} 

La función funciona de maravilla. En lugar de hacer clic en el botón "más", el usuario puede hacer clic en cualquier lugar del contenedor y se le redirecciona correctamente.

Sin embargo, si el usuario después de la redirección hace clic en el botón Atrás, el navegador retrocede dos pasos en lugar de uno como debería. Lo que es más extraño, la historia se ve bien.

esquema simple para una mejor descripción:

Página1 -> Página 2

Página2 [usuario hace clic en "allHot" contenedor] -> allHot redirige a Page3

Page3 [usuario hace clic en el navegador botón de retroceso] -> Página1

Este es un error importante para el sitio web en el que estoy trabajando en este momento. Realmente no tengo ni idea para evitarlo. Error probado en Firefox, Chrome y Opera.

Probado también en Opera "no javascript mode". Si javascript está deshabilitado, el problema no ocurre.

Gracias de antemano por cualquier pista o solución.

Respuesta

28

En lugar de utilizar replace, usa la siguiente:

window.location.href = '' 
+4

Tan simple, funciona como un encanto. Muy apreciado. – sznowicki

+1

Nota: si eres como yo y descubres que el botón Atrás aún no funciona después de redireccionar como se mencionó anteriormente, asegúrate de estar usando la URL completa, p. 'http: // www.example.com/endpoint'. El uso de '/ endpoint' seguía fallando. – zafrani

1

Agregando a la respuesta de MARČOK.

Al usar replace está reemplazando el estado del historial para que no esté presionando un estado más en el historial.

Si usted tiene lo siguiente:

Page1 a State1

Page2 a State2

y luego utilizar sustituya va a sustituir a Page3State2.

Al presionar el botón Atrás, pasará de State2 a State1 y es por eso que va a Page1.

Al utilizar window.location.href va a agregar una más estado para Page3 se establecerá en State3 y al hacer clic en el botón Atrás irá a State2 wich tiene Page2 como URL.

Cuestiones relacionadas