我使用history.js来处理返回按钮。在history.js statechange每当我执行pushstate时都会触发。为什么? history.js每当我做推状态时Statechange都会触发
这pull request索赔
我使用history.js来处理返回按钮。在history.js statechange每当我执行pushstate时都会触发。为什么? history.js每当我做推状态时Statechange都会触发
这pull request索赔
根据这一discussion on github,它的预期的行为已经修改history.js更内嵌W3C规范。
想要添加,是的,这是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的“开发”的版本可以使用!希望这将有助于在未来:)
其他一些人试图现在做到这一点了一天后,我终于找到了解决办法在这里: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
}
});
万分感谢。我个人觉得history.js解决方案更好。 – aWebDeveloper 2012-01-06 06:51:41