我在后台脚本中使用
onHistoryStateUpdated
来检查 Youtube 上的导航。
chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
console.log(details);
// regex checks for youtube watch page
if ((details.url).match(regex)) {
// match if its youtube watch page
// do something
} else {
// do something else
}
});
所以, 我在 Google 的多功能栏中输入
youtube.com
,这会将我带到 YouTube 主页。此步骤不会在控制台中打印任何内容。
但是当我点击任何视频时。我的控制台中记录了 3 个结果。
输出
frameId: 0
parentFrameId: -1
processId: 1215
tabId: 365
timeStamp: 1596402400782.9841
transitionQualifiers: []
transitionType: "link"
url: "https://www.youtube.com/"
又是同一个物体
frameId: 0
parentFrameId: -1
processId: 1215
tabId: 365
timeStamp: 1596402400817.138
transitionQualifiers: []
transitionType: "link"
url: "https://www.youtube.com/"
然后是我期待的输出
frameId: 0
parentFrameId: -1
processId: 1215
tabId: 365
timeStamp: 1596402400829.095
transitionQualifiers: []
transitionType: "link"
url: "https://www.youtube.com/watch?v=c3guRIWSZiQ"
__proto__: Object
为什么我得到前 2 个结果?
如果我从一个视频导航到另一个视频,我不会得到这些结果。
另一个案例(我测试并理解):
如果我通过单击 YouTube 徽标从观看页面移至 Youtube 主页,然后再移至另一个观看页面,我会得到 2 个结果
我认为这只在第一次更新历史记录时才会发生。 (我第一次从
youtube.com
移动到youtube.com/watch?v=*
)。我对么?如果有人能够对这种行为有更多的了解,我将不胜感激。
我需要理解这一点,因为当我第一次从
youtube.com
移动到 youtube.com/watch?v=*
时,我想执行一些操作。我怎样才能做到这一点?
Youtube 有 iFrame 会触发此 url 更改。
在这里查看我的实现。它检测重新加载/导航事件。 https://github.com/uncannyRishabh/Youtube-Freemium/blob/53bf02aca08023e77b65bdcd3c92929a3a17baf9/background.js#L8