2014-12-01 75 views
0

我試圖編寫一個Chrome擴展,當用戶在YouTube上的視頻頁面上執行一些代碼。據我所知,我的代碼是正確的,但它不起作用。Chrome webNavigation.onComplete不工作?

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上工作。

+0

究竟是什麼問題?從一個視頻導航到另一個視頻時,該事件不會被解僱? – Xan 2014-12-02 14:11:40

回答

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"] 

這只是工作以及

+0

歡迎來到SO。您應該知道,堆棧片段實際上只適用於自包含的html/css/js。擴展名是javascript,但它不能真正在代碼片段中運行,所以以這種方式發佈它並不合情理。 – Teepeemm 2014-12-02 13:23:43

+0

哦,好的。謝謝 ! – 2014-12-02 13:36:11

2

chrome.webNavigation.onCompleted僅在文檔已完成加載。當您導航到YouTube上的其他頁面時,新頁面並未以傳統方式「加載」,但該頁面會動態更新,並且URL將被替換爲history.pushState。要檢測這種「導航」,請使用chrome.webNavigation.onHistoryStateUpdated事件以及onCompleted事件。

在YouTube網頁上檢測視頻的另一種方式是使用YouTube上的內容腳本和YouTube特定的某個事件,請參閱this answer