1

我用来收听 hashchange 处理程序事件。但是现在使用 HTML5,您可以在不使用哈希的情况下更改 url。如何为 url 更改添加侦听器?

4

1 回答 1

1

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

HTML5 历史对象只能通过 JS 进行操作。为此,有pushState()replaceState()。一旦使用,浏览器的前后按钮就会触发popstate 事件。我所知道的 HTML5 History 没有其他事件处理程序。

$(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

您可以对替换状态执行相同的操作。

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

于 2012-05-10T19:09:31.007 回答