16

我的 Google-fu 什么也没有。

当你这样做时:

var stateObj = { state: "some state" };
history.pushState(stateObj, "page 2", "other.htm");

是否有关联的窗口回调?

我知道有这个:

window.onpopstate = function() {

}

当用户点击后退按钮时,这非常适合聆听。但是,我想在 URL 发生变化时随时收听,但我不知道该怎么做。

URL 更改时是否有全局回调?

4

1 回答 1

31

不,没有一个onpushstate或什么的。然而,一个小猴子补丁可以解决这个问题:

var pushState = history.pushState;
history.pushState = function () {
    pushState.apply(history, arguments);
    fireEvents('pushState', arguments);  // Some event-handling function
};

这只会在使用 pushState 时通知您。您可能想要为 replaceState 做类似的事情。

如果您需要在 URL 发生变化时收到通知,则上述和 hashchange 处理程序的某种组合将使您大部分时间到达那里。

于 2012-05-02T18:58:07.517 回答