【问题标题】:chrome extension chome.tabs.onUpdate running twice?chrome 扩展 chrome.tabs.onUpdated 运行两次?
【发布时间】:2015-11-21 22:07:13
【问题描述】:
//In background.js
chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
    console.log(info);
});

我正在尝试进行设置,以便在每次加载 youtube 视频页面时运行一次 onUpdate。我想在 youtube 视频加载后等待加载。当我直接从 url 加载时,我得到了我期望的结果,但是当我导航到建议的视频时,有 2 个加载/完成周期。一个用于当前视频,一个用于下一个视频。

这是直接 url youtube 视频的输出。

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

在我的清单中,我有一个简单的 background.js 脚本,允许 webNaviagtion 和选项卡。

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

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。我刚刚尝试了 onHistoryStateUpdate,但我仍然触发了两次,两个日志的 frameId 也都为 0。
    • 这意味着历史状态被页面更新了两次。
    • 啊,好吧,我想我现在的问题是如何设置它,以便它只在我要去的页面上运行。它针对当前的 youtube url 运行,然后是下一个 url。 imgur.com/lcKjZc6
    • 您可以使用chrome.tabs.get(details.tabId, ....) 检查标签的当前网址 - 如果两者相等,则它是新页面网址或使用其他方式。
    • 或者。 Youtube 使用 history.pushState API。并且 chrome.tabs.onUpdate 还没有处理它。见crbug.com/465709
    猜你喜欢
    • 1970-01-01
    • 2013-09-11
    • 2014-07-12
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多