【发布时间】:2016-07-29 21:26:13
【问题描述】:
当 URL 的任何部分发生更改时是否会触发事件?
检测 URL 更改已被多次询问,但一般答案已过时(~2010 年)。
现有答案摘要:
您可以在某些情况下使用
popstate(它会触发所有 URL 更改)。当页面被导航离开(并卸载其资源)时,您可以使用
onbeforeunload。您可以使用
hashchange事件来监视哈希片段的变化。否则,传统的答案似乎仍然是 poll 以更改 window.location。
投票仍然是2016的最佳解决方案吗?令人惊讶的是,鉴于 location 及其 API 中的其他进步,没有为此举办活动,所以这就是我发布这个问题的原因。
【问题讨论】:
-
不,每次更改都没有共同事件,但您可以根据其他事件创建一个。
-
@adeneo - 您指的是哪些事件?目前,我正在尝试检测当您在视频之间导航时 YouTube 上发生的 URL 更改。
-
我认为使用 popstate 是最好的解决方案,也是很好的支持。有什么特殊要求你不想使用它吗?
-
@Wolfgang - 它不会在所有 URL 更改时触发。来自文档:
Note that just calling history.pushState() or history.replaceState() won't trigger a popstate event. The popstate event is only triggered by doing a browser action such as a click on the back button (or calling history.back() in JavaScript). -
在我的情况下 - 我正在注入 javascript(它是一个 chrome 插件)。我尝试了popstate,但没有成功。我会继续寻找。