2012-05-22 10 views
5

¿Hay alguna forma de proporcionar un gancho como, por ejemplo, enHistoryBack? Actualmente estoy usando history.js conHistorial de gancho atrás en JavaScript

History.Adapter.bind (window, 'statechange', function() {}); 

Pero no tengo manera de preguntar si el usuario PresEd history.back() o si es resultado de un history.pushState() llamada .. alguna idea?

Respuesta

2

La forma en que hice esto fue establecer un conjunto de variables en verdadero en cada clic en el sitio real. El evento de cambio de estado verificaría esta variable. Si era cierto, habían usado un enlace en el sitio. Si era falso, habían hecho clic en el botón Atrás de los navegadores.

Por ejemplo:

var clicked = false; 

$(document).on('click','a',function(){ 

    clicked = true; 

    // Do something 

}); 

History.Adapter.bind (window, 'statechange', function() { 

    if(clicked){ 
     // Normal link 
    }else{ 
     // Back button 
    } 

    clicked = false; 

}); 

Espero que ayude :)

+0

gracias @will Acabo de resolver eso usando un enfoque como el tuyo, pero envolví mi llamada History.pushState (...) entre modificaciones "hechas clic" para evitar que se ejecute el gancho "statechange" –

1

Todos los estados se almacenan en History.savedStates. Cada vez que se empuja hacia atrás, se agrega otro estado. Entonces, en teoría, podría probar History.savedStates para ver si History.savedStates[History.savedStates.length - 2] == currentState. Eso indicaría que el usuario pasó del paso a, al paso b, al paso a. Sin embargo, el usuario podría llegar allí de otra manera que no sea el botón Atrás, por lo que es posible que deba usar esto en combinación con los eventos del usuario.

También puede usar el método History.getStateByIndex para devolver un estado guardado.

Cuestiones relacionadas