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

o0o*_*o0o 6 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});
   };
});
Run Code Online (Sandbox Code Playgroud)

Xan*_*Xan 8

两个关键点应该可以帮助您解决问题.

1)chrome.browserAction.setBadgeText有一个可选参数,tabId它将值绑定到选项卡.

2)您应该chrome.tabs.onUpdatedchangeInfo字段过滤事件.

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

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});
    };
});
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢谢!键是tab.id:chrome.browserAction.setBadgeText({text:newText,tabId:tab.id}); (2认同)