javascript - chrome 扩展 chrome.tabs.onUpdated 运行两次?

标签 javascript google-chrome google-chrome-extension

//In background.js
chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
    console.log(info);
});

我尝试将其设置为每次加载 YouTube 视频页面时 onUpdate 都会运行一次。我想在 YouTube 视频加载后等待加载。当我直接从 url 加载时,我得到了我所期望的结果,但是当我导航到建议的视频时,有 2 个加载/完整周期。一个用于当前视频,一个用于下一个视频。

Direct Url

这是直接 URL YouTube 视频的输出。

Navigating

如果我在观看另一个 YouTube 视频时导航到一个 YouTube 视频,就会发生这种情况。

在我的 list 中,我有一个简单的 background.js 脚本、webNaviagtion 和选项卡的权限。

我不知道为什么它运行了两次。

最佳答案

tabs.onUpdated 为每个 frame/iframe 调用,Youtube 观看页面加载一个。

webNavigation API向事件监听器提供frameId,主页有frameId == 0

请注意,当用户从一个视频转到另一个视频或从 Youtube 主页面转到视频页面时,Youtube 不会重新加载页面,因此要检测这些更改,您可以使用 chrome.webNavigation.onHistoryStateUpdated 事件监听器或将监听站点使用的 DOM 事件的内容脚本,即 "spfdone" .

关于javascript - chrome 扩展 chrome.tabs.onUpdated 运行两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849140/

相关文章:

javascript - 如何使用 JavaScript 强制 Chrome 页面/标签崩溃?

google-chrome-extension - 如何使用新的 OptionsV2 方法调试 Chrome 扩展 "options"页面?

javascript - chrome.management.get 不工作

javascript - 单击 div 并将该 div 的值附加到其中

javascript - 在 Pug 中迭代数组

javascript - 如何在 Chrome 地址栏中显示和隐藏 cookie 图标?

html - 禁用我网站上的 Chrome 翻译栏

javascript - 在 Chrome 扩展中使用远程 JavaScript

javascript - 模仿鼠标点击

javascript - 如何在 JavaScript 中将对象作为字段添加到另一个现有对象