【问题标题】:Is there an event that fires when URL changesURL 更改时是否会触发事件
【发布时间】: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,但没有成功。我会继续寻找。

标签: javascript google-chrome


【解决方案1】:

使用 history.pushState() 时的事件应该足以对 href 更改采取措施:

window.addEventListener('popstate', listener);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多