是否有HTML5 AJAX应用程序的URL更改处理程序?(类似于HTML4的hashchange处理程序)

时间:2012-05-10 19:02:34

标签: javascript jquery browser-history

我用来监听hashchange handler事件。但现在使用HTML5,您可以在不使用哈希的情况下更改网址。如何为url更改添加侦听器?

1 个答案:

答案 0 :(得分:1)

即使不使用JS,也可能发生哈希更改。与单击锚链接的默认行为一样,可以触发哈希更改。

HTML5历史对象只能通过JS操作。为此,有pushState()replaceState()。使用后,浏览器后退和前进按钮将触发popstate event。我知道HTML5历史记录中没有其他事件处理程序。

$(window).bind("popstate", function() {
    console.log(window.location.href);
});

如果在将状态推送到历史对象时需要触发器,那么你应该依赖于调用它的人来允许观察者(回调)。

否则你可以尝试一些不那么健壮的东西:

function onPushState(callback) {
    (function(pushState) {
       history.pushState = function() {
           pushState.apply(this, arguments);
           callback.apply(window, arguments);
       };
    })(history.pushState);
}

onPushState(function() {
    console.log(window.location.href);
});

http://jsfiddle.net/Cxjey

你可以做同样的替换状态。

同样,这可能不是一个好主意,因为您正在更改默认浏览器行为。