chrome.browserAction.setBadgeText(object details) is used to set the badge text for a chrome extension. However, if the tabId doesn\'t exist, Chrome produces the following e
A bug was reported for this issue and has been marked as fixed: https://crbug.com/451320
An option would be to call chrome.tabs.get first and if no error is called assume that the tab will exist for the next few milliseconds.
var tabId = 5000;
function callback(tab) {
if (chrome.runtime.lastError) {
console.log(chrome.runtime.lastError.message);
} else {
chrome.browserAction.setBadgeText({
text: 'text',
tabId: tabId
});
}
}
chrome.tabs.get(tabId, callback);
There is of course always a chance the tab could get closed between tabs.get
finishing and setBadgeText
getting called but it's very unlikely.
In addition to chrome.tabs.get()
as described above, you can also piggyback off an existing browserAction method that accepts a callback to catch for errors. Example:
var tabId = 5000;
chrome.browserAction.getTitle({tabId: tabId}, function(result) {
if (chrome.runtime.lastError) return;
// The coast is clear...
chrome.browserAction.setBadgeText({
text: 'text',
tabId: tabId
});
});
Good news: chrome.browserAction.setBadgeText()
should also support a callback function like chrome.browserAction.getTitle()
starting with Chrome 67 according to one source. Fingers crossed!