2012-05-22 3 views
5

Есть ли способ обеспечить крючок, например, onHistoryBack? Я в настоящее время использую history.js сИстория назад крюк на JavaScript

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

Но у меня нет никакого способа, чтобы спросить, если пользователь presed history.back() или, если это результат History.pushState() вызов .. любая идея?

ответ

2

То, как я это делал, это установить значение переменной, равное true, при каждом нажатии на фактический сайт. Событие statechange затем проверит эту переменную. Если это правда, они использовали ссылку на сайте. Если это было неверно, они нажали кнопку браузера назад.

Например:

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; 

}); 

Надежда, что помогает :)

+0

спасибо @will Я только что решил использовать такой подход, как ваш, но я завернул мой вызов History.pushState (...) между «щелканными» модификациями, чтобы предотвратить выполнение «change change» –

1

Все состояния хранятся в History.savedStates. Каждый раз, когда возвращается назад, добавляется другое состояние. Поэтому теоретически вы можете проверить History.savedStates, чтобы узнать, History.savedStates[History.savedStates.length - 2] == currentState. Это означало бы, что пользователь перешел с шага a, на шаг b, на шаг a. Однако пользователь может использовать другие способы, кроме кнопки «Назад», поэтому вам может понадобиться использовать это в сочетании с пользовательскими событиями.

Вы также можете использовать метод History.getStateByIndex для возврата сохраненного состояния.