我用来收听 hashchange 处理程序事件。但是现在使用 HTML5,您可以在不使用哈希的情况下更改 url。如何为 url 更改添加侦听器?
问问题
2408 次
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);
});
您可以对替换状态执行相同的操作。
同样,这可能不是一个好主意,因为您正在更改默认浏览器行为。
于 2012-05-10T19:09:31.007 回答