Javascript 是否存在URL更改时触发的事件
URL的任何部分发生更改时是否会触发事件 检测URL更改已经被问了很多次,但是一般的答案已经过时了(~2010年) 现有答案摘要:Javascript 是否存在URL更改时触发的事件,javascript,google-chrome,Javascript,Google Chrome,URL的任何部分发生更改时是否会触发事件 检测URL更改已经被问了很多次,但是一般的答案已经过时了(~2010年) 现有答案摘要: 您可以在某些情况下使用popstate(它会触发所有URL更改) 当页面被导航离开(并卸载其资源)时,可以使用onbeforeuload 您可以使用hashchange事件监视哈希片段的更改 否则,传统的答案似乎仍然是对window.location进行投票 投票仍然是2016年的最佳解决方案吗?令人惊讶的是,鉴于位置及其API的其他改进,没有针对这一点的事件,
- 您可以在某些情况下使用
(它会触发所有URL更改)popstate
- 当页面被导航离开(并卸载其资源)时,可以使用
onbeforeuload
- 您可以使用
事件监视哈希片段的更改hashchange
- 否则,传统的答案似乎仍然是对window.location进行投票
投票仍然是2016年的最佳解决方案吗?令人惊讶的是,鉴于
位置及其API的其他改进,没有针对这一点的事件,所以这就是我发布此问题的原因。使用历史记录时的事件。pushState()应该足以对href更改采取行动:
window.addEventListener('popstate', listener);
const pushUrl = (href) => {
history.pushState({}, '', href);
window.dispatchEvent(new Event('popstate'));
};
不,没有针对每个更改的通用事件,但您可以基于其他事件创建一个。@adeneo-您指的是哪些事件?目前,我正在尝试检测YouTube上在视频之间导航时发生的URL更改。我认为使用popstate是最好的解决方案,也是最好的supportet。你为什么不想使用它,有什么特别的要求吗?@Wolfgang-它不会在所有URL更改时触发。从文档中:注意,仅调用history.pushState()或history.replaceState()不会触发popstate事件。popstate事件仅通过执行浏览器操作触发,例如单击后退按钮(或调用JavaScript中的history.back())。
在我的情况下,我正在注入JavaScript(这是一个chrome插件)。我试过popstate,但没有成功。我会继续找的。