给定具有ajax导航功能的webapp,您打算使用html5的历史记录导航。
但是:绑定到popstate事件时不会触发。在以下情况下超过页面加载:
如果HTML5可用(正确检测到,演示程序在FF中的效果与FF一样):
// Callback
function historyChangeHandler(data) {
console.log(data);
}
// Bind
$(window).bind('popstate', historyChangeHandler);
// Trigger
$("a").click(function(e) {
var url = "/";
// ...
console.log("clicked");
history.pushState({url: url}, "", url);
return false;
});
什么不起作用:
单击链接时,不会调用popstate回调historyChangeHandler()。也就是说,单击是打印出来的,但不是事件。
我试过的
使用setTimeout推迟pushState调用。
e.preventDefault();并返回true而不是false
还要附加到div-s并返回true
什么有效:
在页面加载时会调用historyChangeHandler()。
按下后退按钮将调用historyChangeHandler()。
按下前进按钮时会调用historyChangeHandler()。
如果从控制台调用history.pushState({url:“ / test”},“”,“ / test”),则为historyChangeHandler()!
我想念任何线索吗?
最佳答案
为什么您需要触发popstate事件?为什么不只调用您的函数?
$("a").click(function(e) {
var url = "/";
// ...
console.log("clicked");
history.pushState({url: url}, "", url);
historyChangeHandler({url: url});
return false;
});