JavaScript上的历史回溯钩子

JavaScript上的历史回溯钩子,javascript,jquery,history.js,Javascript,Jquery,History.js,有没有一种方法可以提供像onHistoryBack这样的钩子?我目前正在使用history.js和 History.Adapter.bind (window, 'statechange', function () {}); 但我无法询问用户是否呈现了history.back()或它是否是history.pushState()调用的结果。。有什么想法吗?我这样做的方法是在每次点击实际站点时将变量设置为true。然后,statechange事件将检查此变量。如果这是真的,他们使用了网站上的链接。如

有没有一种方法可以提供像onHistoryBack这样的钩子?我目前正在使用history.js和

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

但我无法询问用户是否呈现了history.back()或它是否是history.pushState()调用的结果。。有什么想法吗?

我这样做的方法是在每次点击实际站点时将变量设置为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;

});

希望有帮助:)

所有状态都存储在
历史记录中。savedStates
。每次推回时,都会添加另一个状态。因此,从理论上讲,您可以测试
History.savedStates
,看看
History.savedStates[History.savedStates.length-2]==currentState
。这将指示用户从步骤a到步骤b,再回到步骤a。但是,用户可以通过“后退”按钮以外的其他方式到达目的地,因此您可能需要将其与用户事件结合使用


您还可以使用
History.getStateByIndex
方法返回保存的状态。

谢谢@will我刚刚用类似于您的方法解决了这个问题,但是我包装了我的历史记录。在“单击”修改之间调用pushState(…),以防止执行“statechange”钩子