2012-01-05 51 views

回答

12

想要添加,是的,这是History.js的预期行为。 同时有more discussions批评这种行为,因为它不是W3C标准,并造成一些混淆。

总之,要回答你的问题:在History.js pushState()函数是在最后调用statechange。

该解决方案的上升是,你可以改变(推)你的新状态,并让onstatechange()函数处理过渡。 Downside是你无法处理异常/或不得不将它们写入onstatechange事件处理程序。

我个人更喜欢W3C处理这种方式,因为您可以区分后退/前进按钮和pushState。该History.js维护者是在一个内部标志的解决方案的工作,使您能够改变这种行为:

注意一下上面的电话[pushState的通话]触发statechange事件,如果由于某种原因 你不想给你的statechange 处理程序中,然后发生,你可以使用以下命令:

if (History.getState().internal) { return; } 

*此功能目前正在开发中,只能用History.js的“开发”的版本可以使用!希望这将有助于在未来:)

9

其他一些人试图现在做到这一点了一天后,我终于找到了解决办法在这里:https://github.com/browserstate/history.js/issues/47#issuecomment-25750285

的代码非常简单该死,下面是引自链接:

当你把你的状态

History.pushState({ 
    _index: History.getCurrentIndex(), 
    someData: ... 
}, someTitle, someUrl); 

,然后在事件绑定

History.Adapter.bind(window, 'statechange', function() { 
    var currentIndex = History.getCurrentIndex(); 
    var internal = (History.getState().data._index == (currentIndex - 1)); 
    if (!internal) { 
     // your action 
    } 
}); 
相关问题