一尘不染

window.location.href更改时的事件

javascript

我正在为某个网站编写Greasemonkey脚本,该脚本有时会进行修改location.href

在页面上进行更改时,如何获取事件(通过window.addEventListener或类似方式)window.location.href?我还需要访问指向新的/修改的URL的文档的DOM。

我看到了其他涉及超时和轮询的解决方案,但如果可能的话,我想避免这种情况。


阅读 1071

收藏
2020-05-01

共1个答案

一尘不染

popstate事件:

当活动历史记录条目更改时,将触发popstate事件。[…]popstate事件仅通过执行浏览器操作(例如单击“后退”按钮(或在JavaScript中调用history.back()))来触发

因此,在使用时侦听popstate事件并发送popstate事件history.pushState()应该足以对href更改采取措施:

window.addEventListener('popstate', listener);

const pushUrl = (href) => {
  history.pushState({}, '', href);
  window.dispatchEvent(new Event('popstate'));
};
2020-05-01