2012-11-26 72 views
0

是否可以在頁面加載事件時更改按鈕背景顏色,但到目前爲止我沒有找到任何此類方法。如果這是不可能的,那麼我很樂意使用一些在頁面加載後加載的預定義圖像。Chrome擴展:更改地址欄按鈕運行時的背景顏色

我曾嘗試以下,沒有成功:

的script.js

// chrome.browserAction.setIcon("red.png"); 
chrome.browserAction.setIcon({path:'red.png'}); 

的manifest.json

{ 
    "name": "Domain Colors", 
    "version": "1.0", 
    "manifest_version": 2, 
    "content_scripts": [{ 
     "matches": ["http://*/*"], 
     "js": ["script.js"] 
    }], 
    "permissions": [ "tabs", "http://*/*" ], 
    "browser_action": { 
    "default_title": "Colry", 
    "default_icon": "blue.png" 
    } 
} 
+0

這是代碼。 http://pastie.org/5438480我在談論地址欄按鈕 – Volatil3

+0

由於一些奇怪的原因,我正在* setBadgeBackgroundColor *或* setIcon *方法未定義。 – Volatil3

+0

請參閱[在內容腳本中是否可以使用'chrome。*'擴展API?](http://stackoverflow.com/questions/11700822/can-chrome-extension-apis-be-used-inside-content-scripts/11700893 #11700893) –

回答

7

爲了使用browserAction API,一個background page是必需的。如果您想保留當前的控制流(通過內容腳本更新圖標),則需要pass messages。這裏的最低限度:

// script.js 
chrome.extension.sendMessage(''); 
// background.js 
chrome.extension.onMessage.addListener(function(message, sender) { 
    chrome.browserAction.setBadgeBackgroundColor({ 
     color: 'red', 
     tabId: sender.tab.id 
    }); 
}); 

清單文件需要一個額外的條目:

"background": { 
    "scripts": ["background.js"] 
} 

你不需要的內容腳本檢測頁面加載的目的。一個單一的事件監聽器都可以使用(在後臺頁面):

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) { 
    if (changeInfo.status === 'loading') { 
     chrome.browserAction.setBadgeBackgroundColor({ 
      color: 'red', 
      tabId: tabId 
     }); 
    } 
}); 

有在chrome.browserAction.setBadgeBackgroundColor文檔的密切關注。也有lots of examples using the browserAction API,你應該可以通過查看這些示例自己獲得工作擴展。

+0

Thansk爲您的片段。對不起,因爲這麼笨,但..我正在嘗試它,但不知何故,即使**重新加載**擴展名,它不刷新background.html文件。它不斷顯示舊代碼並繼續執行它。如何強制讓background.js反映這些變化? – Volatil3

+0

事實證明,.js頁面正在被緩存。 BackgroundBadgeText不適用於我,但是setIcon()確實有效,但是它對所有選項卡進行了更改,而非選擇性更改。 – Volatil3

+0

@ Volatil3我的答案中有一個小錯字。它現在工作嗎? –