理解 webNavigation.onHistoryStateUpdated() 行为

问题描述 投票:0回答:1

我在后台脚本中使用

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 个结果

  1. 观看页面到 youtube 主页(通过单击徽标) - 一个用于此(我理解)
  2. youtube 到任何观看页面 - 一个用于这个(而不是我一开始得到的 3 个结果)。这个我也明白

我认为这只在第一次更新历史记录时才会发生。 (我第一次从

youtube.com
移动到
youtube.com/watch?v=*
)。我对么?如果有人能够对这种行为有更多的了解,我将不胜感激。

我需要理解这一点,因为当我第一次从

youtube.com
移动到
youtube.com/watch?v=*
时,我想执行一些操作。我怎样才能做到这一点?

javascript ajax google-chrome-extension xmlhttprequest browser-history
1个回答
0
投票

Youtube 有 iFrame 会触发此 url 更改。

在这里查看我的实现。它检测重新加载/导航事件。 https://github.com/uncannyRishabh/Youtube-Freemium/blob/53bf02aca08023e77b65bdcd3c92929a3a17baf9/background.js#L8

© www.soinside.com 2019 - 2024. All rights reserved.