5

有没有办法提供诸如 onHistoryBack 之类的钩子?我目前正在使用 history.js

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

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

4

2 回答 2

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;

});

希望有帮助:)

于 2012-05-22T14:20:36.413 回答
1

所有状态都存储在History.savedStates. 每次返回时都会添加另一个状态。所以理论上你可以测试History.savedStates看看是否History.savedStates[History.savedStates.length - 2] == currentState。这将表明用户从步骤 a 到步骤 b,然后返回到步骤 a。但是,用户可以通过返回按钮以外的其他方式到达那里 - 因此您可能需要将其与用户事件结合使用。

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

于 2012-05-22T14:31:59.143 回答