Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否存在URL更改时触发的事件_Javascript_Google Chrome - Fatal编程技术网

Javascript 是否存在URL更改时触发的事件

Javascript 是否存在URL更改时触发的事件,javascript,google-chrome,Javascript,Google Chrome,URL的任何部分发生更改时是否会触发事件 检测URL更改已经被问了很多次,但是一般的答案已经过时了(~2010年) 现有答案摘要: 您可以在某些情况下使用popstate(它会触发所有URL更改) 当页面被导航离开(并卸载其资源)时,可以使用onbeforeuload 您可以使用hashchange事件监视哈希片段的更改 否则,传统的答案似乎仍然是对window.location进行投票 投票仍然是2016年的最佳解决方案吗?令人惊讶的是,鉴于位置及其API的其他改进,没有针对这一点的事件,

URL的任何部分发生更改时是否会触发事件

检测URL更改已经被问了很多次,但是一般的答案已经过时了(~2010年)

现有答案摘要:

  • 您可以在某些情况下使用
    popstate
    (它会触发所有URL更改)

  • 当页面被导航离开(并卸载其资源)时,可以使用
    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,但没有成功。我会继续找的。