给定具有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;
});

09-27 05:02