2014-05-17 11 views
6

Meine Erweiterung ruft Daten mit tab.url ab und legt sie in chrome.browserAction.setBadgeText ab. Wenn ich einen neuen Tab öffne, wird er zurückgesetzt. Wie kann ich BadgeText nur für eine neue Registerkarte aktualisieren? und behalte es unverändert für ein altes?Wie kann ich chrome.browserAction.setBadgeText für jede Registerkarte beibehalten?

Erweiterung Layout:

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}); 
    }; 
}); 
+1

Wir brauchen relevanten Code zu helfen. – Xan

+0

Wäre eine Seitenaktion angemessener? Was tut es? – Teepeemm

+0

Es zeigt Statistiken einer aktuellen Domäne – o0o0o

Antwort

7

Zwei wichtige Punkte sollten Ihnen mit Ihren Problemen helfen.

1) chrome.browserAction.setBadgeText hat einen optionalen Parameter tabId, der den Wert an die Registerkarte bindet.

2) Sie sollten chrome.tabs.onUpdated Ereignisse von changeInfo's fields filtern.

So ändern Sie Ihren Code:

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}); 
    }; 
}); 

Diese nicht neu Tabs' Schöpfung fangen könnte; Wenn nicht, hören Sie auch onCreated

+2

Danke Xan! Der Schlüssel ist eine tab.id: chrome.browserAction.setBadgeText ({text: newText, tabId: tab.id}); – o0o0o

2
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 
Verwandte Themen