King_llama
King_llama

Reputation: 179

Chrome webNavigation.onComplete not working?

I'm trying to write a chrome extension that executes some code when the user is on a youtube page with a video. As far as I can tell, my code is correct, but It isn't working.

eventPage.js:

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

and my manifest file

{
  "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
  }
}

It seems onCompleted doesn't work on youtube.

Upvotes: 2

Views: 14261

Answers (2)

Jamshed Katta
Jamshed Katta

Reputation: 119

Instead of using webNavigation you can also use

Add this to your 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();
    }

  }
});

and add the following to your mainfest.json

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

This will work just as well

Upvotes: 8

Rob W
Rob W

Reputation: 348992

chrome.webNavigation.onCompleted is only triggered when a document has finished loading. When you navigate to a different page on YouTube, the new page is not really "loaded" in a traditional way, but the page is dynamically updated, and the URL is replaced using history.pushState. To detect this kind of "navigations", use the chrome.webNavigation.onHistoryStateUpdated event in addition to the onCompleted event.

Another way to detect videos on YouTube pages is by using content scripts on YouTube and some event specific to YouTube, see this answer.

Upvotes: 7

Related Questions