如何为每个标签保留chrome.browserAction.setBadgeText?

时间:2014-05-17 16:41:21

标签: javascript google-chrome-extension

我的扩展程序使用tab.url获取数据并将其放在chrome.browserAction.setBadgeText中。当我打开一个新标签时,它会重置。如何仅为新标签更新BadgeText?并保持旧的不变?

扩展布局:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
function(tabId, changeInfo, tab){
    //using tab.url and XMLHttpRequest() i get newText for:
    chrome.browserAction.setBadgeText({text: newText});
   };
});

2 个答案:

答案 0 :(得分:8)

两个关键点可以帮助您解决问题。

1)chrome.browserAction.setBadgeText有一个可选参数tabId,用于将值绑定到标签。

2)您应该按changeInfo's fields过滤chrome.tabs.onUpdated个事件。

因此,请将您的代码更改为:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
    function(tabId, changeInfo, tab){
        if(!changeInfo.url) return; // URL did not change
        // Might be better to analyze the URL to exclude things like anchor changes

        /* ... */
        chrome.browserAction.setBadgeText({text: newText, tabId: tab.id});
    };
});

这可能无法捕捉新标签的创建;如果没有,也请听onCreated

答案 1 :(得分:3)

 chrome.browserAction.setBadgeText({text: newText}, tab.id);  //<<this is not working to me

 chrome.browserAction.setBadgeText({text: "Phish", tabId: tab.id}); //<<This is working to me