As you can see in the documentation browserAction.onClicked cannot be used for this task.
Since the only part of an extension that survives disabling/removing it is a content script, you can declare a content script that periodically tries to access your extension so a failure would indicate the extension is disabled.
Here's an example that displays a DOM element on the top of all open tabs:
manifest.json:
"content_scripts": [{
"matches": ["<all_urls>"],
"run_at": "document_start",
"all_frames": true,
"js": ["ping.js"]
}]
ping.js:
var pingTimer = setInterval(ping, 1000);
function ping() {
var port = chrome.runtime.connect();
if (port) {
port.disconnect();
return;
}
clearInterval(pingTimer);
onDisabled();
}
function onDisabled() {
document.body.insertAdjacentHTML('beforeend',
'<div style="all:unset; position:fixed; left:0; top:0; right:0; height:2rem;' +
' background:blue; color:white; font: 1rem/2rem sans-serif; z-index:2147483647;">' +
'We hate to see you go. Please check our website: ' +
'<a style="all:inherit; color:cyan; display:inline; position:static;"' +
' href="http://example.com">http://example.com</a></div>');
}
Notes:
- This will only work on pages that allow content script injection. In other words, all except the browser built-in pages like chrome://settings in chromium-based browsers or about:addons in Firefox-based ones, the extension/addon webstore site, other extensions' pages.
- Opening a new tab with your site will be problematic as content scripts can't access chrome.tabs API, and all other standard JavaScript methods to open a new tab will be blocked by the default popup-blocking policy, which can be manually altered by a user, though.
- Of several chrome API available in a content script only
chrome.runtime
survives disabling an extension, apparently.
- When you re-enable or reload your extension its content scripts aren't reinjected automatically into the open tabs! You'll need to do it manually in your background/event page script using chrome.tabs.query and chrome.tabs.executeScript. Search for examples on StackOverflow.