【问题标题】:Chrome webNavigation.onComplete not working?Chrome webNavigation.onComplete 不起作用?
【发布时间】:2014-12-01 23:27:03
【问题描述】:

我正在尝试编写一个 chrome 扩展程序,当用户在带有视频的 youtube 页面上时执行一些代码。据我所知,我的代码是正确的,但它不起作用。

eventPage.js:

chrome.webNavigation.onCompleted.addListener(function(){
  console.log("Test")
},{url: [{pathContains: "watch", hostSuffix: "youtube.com"}]});

还有我的清单文件

{
  "manifest_version": 2,

  "name": "youtubeExtension",
  "description": "A chrome extension for youtube",
  "version": "0.1",

  "permissions": ["https://www.youtube.com/", "webNavigation"],
  "background": {
    "scripts": ["eventPage.js"],
    "persistant": false
  }
}

似乎 onCompleted 在 youtube 上不起作用。

【问题讨论】:

  • 到底是什么问题?当您从一个视频导航到另一个视频时不会触发该事件?

标签: google-chrome google-chrome-extension youtube


【解决方案1】:

除了使用 webNavigation,您还可以使用

将此添加到您的 background.js

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {
    if (tab.url.indexOf("youtube.com") != -1) {
      alert("Youtube load complete");
      injectScripts();
    }

  }
});

并将以下内容添加到您的 mainfest.json

"permissions": ["https://www.youtube.com/", "webNavigation","tabs"]

这样也可以

【讨论】:

  • 欢迎来到 SO。您应该知道堆栈 sn-ps 实际上仅适用于自包含的 html/css/js。扩展是 javascript,但它不能真正在 sn-p 中运行,因此以这种方式发布它没有多大意义。
  • 如果您将 youtube 作为背景标签打开,它也会触发。 TS 表示当前可见的选项卡。
  • 感谢您的回答。这正是我想要的。 @Jamshed Katta。
【解决方案2】:

chrome.webNavigation.onCompleted 仅在文档​​完成加载时触发。当您导航到 YouTube 上的其他页面时,新页面并没有真正以传统方式“加载”,而是动态更新页面,并且使用 history.pushState 替换 URL。要检测这种“导航”,请在 onCompleted 事件之外使用 chrome.webNavigation.onHistoryStateUpdated 事件。

在 YouTube 页面上检测视频的另一种方法是使用 YouTube 上的内容脚本和一些特定于 YouTube 的事件,请参阅this answer

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2021-04-18
    • 2013-04-18
    • 2013-12-24
    • 2021-06-24
    • 2016-04-12
    相关资源
    最近更新 更多