Désactiver / Activer l'extension Chrome via l'action / l'icône du navigateur

L'extension chrome que je développe insère les scripts de contenu et css sur chaque page d'un site Web. Cependant, l'utilisateur peut avoir une certaine page ou des pages auxquelles il ne veut pas que l'extension s'exécute, donc ce serait génial si je pouvais configurer l'action du navigateur comme un bascule activé / désactivé.

Ce que j'aimerais faire, c'est quelque chose comme ça:

chrome.browserAction.onClicked.addListener(function(tab) { //IF ENABLED THEN DISABLE //IF DISABLED THEN ENABLE } 

Toute aide sera grandement appréciée!

Une telle API n'est pas fournie. Mais deux solutions possibles existent:

I. Vous pouvez utiliser le drapeau «désactivé» et le mettre à jour à partir de votre page d'arrière-plan.

Page de fond:

 function disableExtension(disabled) { chrome.windows.getAll({populate : true}, function (window_list) { for (var i = 0; i < window_list.length; ++i) { var window = window_list[i]; for (var j = 0; j < window.tabs.length; ++j) { var tab = window.tabs[j]; if (checkContentScriptExists(tab)) { chrome.tabs.executeScript(tab.id, {code : "disabled = " + disabled + ";"}, allTabs: true) } } } // No matching url found. Open it in the new tab chrome.tabs.create({ url : url, selected: true }); }); } 

Et le script de contenu doit vérifier la condition avant l'exécution

 if (!disabled) doSomething(); 

II. Approche controversée pour sauvegarder la variable de désactivation dans le contexte de l'âge de fond

Page de fond:

 function disableExtension(disabled) { global.disabled = disabled; } chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { if (request.msg == "getDisabled") { sendResponse({disabled: global.disabled}); return true; } }); 

Et le script de contenu doit interroger l'état désactivé actuel avant l'exécution

 chrome.runtime.sendMessage({msg: "getDiasbled"}, function(response) { if (!response.disabled) doSomething(); }); 

Les extensions Chrome ont des API propres. Vous pouvez les inviter par des scripts de contenu. Je ne sais pas si vous pouvez les invoquer via un tiers JS. Reportez cette encre

J'espère que cela aide.