如何检测没有't触发操作状态

How to detect a pushState / replaceState that doesn't trigger onpopstate

本文关键字:状态 操作 何检测 检测      更新时间:2023-09-26

关于popstate,文档中这样写道:

请注意,仅调用history.pushState()或history.replaceState()不会触发popstate事件。popstate事件仅被触发通过执行浏览器操作,例如单击后退按钮(或在JavaScript中调用history.back())。

例如,在youtube上,如果你导航到另一个视频,url会发生变化,但我如何检测到这种变化,因为它不是由浏览器操作触发的?

我想在内容脚本上做这件事,但如果不可能,我可以在后台做。

附言:Youtube只是这方面最简单的例子,所以Youtube特定的解决方案,或者依赖于Youtube在html中维护某些id的解决方案不是我想要的。

您可以使用webNavigation API并在后台监听onHistoryStateUpdated事件。

例如:

chrome.webNavigation.onHistoryStateUpdated.addListener(function () {
  // do something here
})