2013-02-16 133 views
1

我的清單看起來像這樣:Chrome擴展如何注入我的內容腳本到所有Facebook頁面

{ 
    "manifest_version": 2, 

    "name": "Facebook Extension", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "images/fbh.png", 
    "default_popup": "fbh-popup.html" 
    }, 

    "permissions": [ 
    "storage", 
    "background", 
    "tabs", 
    "http://www.facebook.com/*", 
    "https://www.facebook.com/*" 
    ], 

    "content_scripts": [ 
    { 
     "matches": [ 
     "http://www.facebook.com/*", 
     "https://www.facebook.com/*" 
     ], 
     "js": ["js/jquery-1.9.1.min.js", "js/fbh-main.js"], 
     "css": ["css/fbh-main.css"], 
     "run_at": "document_end" 
    } 
    ], 

    "background":{ 
    "persistent": true, 
    "scripts": ["js/jquery-1.9.1.min.js","js/fbh-background.js"] 
    } 
} 

我想每一次我去在Facebook新頁面注入我的內容腳本。例如,如果我點擊用戶的個人資料,我想注入內容腳本。

在我的背景頁,我有以下監聽器:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) { 
    console.log(changeInfo); 
    if (changeInfo.status === 'complete') { 
     chrome.tabs.executeScript(null, {file: "js/fbh-main.js"}); 
    } 
}); 

有幾個與此問題,但是。首先,這個函數試圖將我的內容腳本注入到所有頁面中。我需要能夠讀取清單權限。其次,如果我從www.facebook.com開始,則內容腳本將執行它應該做的事情。但是,如果從那裏,我點擊「foo」的配置文件,然後轉到www.facebook.com/foo,注入內容腳本(如console.log消息所證明的),但它沒有執行它應該做的事情。我認爲它的注入時間太快,因爲如果我直接導​​航到www.facebook.com/foo,則內容腳本將被加載並執行其操作。

有沒有更好的方法來做到這一點?

+0

是[這個問題](http://stackoverflow.com/questions/6497548/chrome-extension-make-it-run-每頁加載)的任何幫助? – thordarson 2013-02-17 01:35:19

回答

0

如果你的腳本執行很快,你可以隨時使用jQuery

$.(your code here);

的編輯:對於自動upadate問題,你可以簡單地在內容腳本添加監聽

document.addEventListener("DOMSubtreeModified", function(event){ 
    //something on the page has changed 
}); 
+0

我不是Chrome擴展專家,但沒有爲您的代碼設置一個硬編碼的超時錯誤類練習嗎?你不應該聽一個事件嗎? – thordarson 2013-02-17 01:34:33

+0

Thx,你說得對,已經很晚了:我認爲這裏的解決方案更好。 – 2013-02-17 08:51:27

1

試試這個代碼

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo,tab) { 
    console.log(changeInfo); 
    if ((tab.url.indexOf("http://www.facebook.com/") !=-1 || tab.url.indexOf("https://www.facebook.com/") !=-1) && changeInfo.status === 'complete') { 
     chrome.tabs.executeScript(tabId, {file: "js/fbh-main.js"}); 
    } 
}); 
  • chrome.tabs.executeScript(null,將在有源標籤ö執行腳本f當前窗口,可能會在用戶交互時發生變化,chrome.tabs.executeScript(tabId將始終確保以製表符中的腳本注入爲目標。
  • chrome.tabs.onUpdated.addListener將觸發對每個選項卡上,添加過濾器tab.url.indexOf("https://www.facebook.com/")確保腳本在臉書頁面注入。

分享您的清單,內容腳本和相關文件,如果問題仍然存在

相關問題