Comment puis-je écrire une extension chrome de telle sorte que chaque fois qu'un utilisateur clique sur l'icône, mon script soit exécuté mais aucune fenêtre contextuelle ne soit ouverte? ils ont soudainement cessé de travailler, 404 sur chaque page, comme je suis arrivé à ce point).
Je suppose qu'il s'agit simplement de configurer correctement le manifeste. Voici ce que j'ai maintenant:
{
"name": "My Extension",
"version": "0.1",
"description": "Does some simple stuff",
"browser_action": {
"popup" : "mine.html",
"default_icon": "logo.png"
},
"permissions": [
"notifications"
]
}
Supprimez le popup de votre section browser_action du manifeste et utilisez pages d'arrière-plan avec Action du navigateur dans le script d'arrière-plan.
chrome.browserAction.onClicked.addListener(function(tab) { alert('icon clicked')});
Tout d'abord, si vous ne voulez pas afficher de popup, supprimez "popup" : "mine.html"
de ton manifest.json
(indiqué dans votre question).
Votre manifest.json
ressemblera à ceci:
{
"name": "My Extension",
"version": "0.1",
"manifest_version" : 2,
"description": "Does some simple stuff",
"background" : {
"scripts" : ["background.js"]
},
"browser_action": {
"default_icon": "logo .png"
},
"permissions": ["activeTab"]
}
manifest_version
doit être là et il doit être 2
.activeTab
a été ajoutée.Deuxièmement, pour exécuter un script lorsque vous cliquez sur l'icône, placez le code ci-dessous dans votre background.js
fichier (le nom du fichier est spécifié dans votre manifest.json
):
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "testScript.js"});
});
Finalement, testScript.js
est l'endroit où vous devez mettre le code que vous souhaitez exécuter lorsque vous cliquez sur l'icône.
Au lieu de spécifier une page contextuelle, utilisez le chrome.browserAction.onClicked
API, documentée ici .
C'était exactement ce dont j'avais besoin, mais je devrais ajouter ceci: si tout ce dont vous avez besoin est un événement ponctuel comme lorsqu'un utilisateur clique sur l'icône de l'extension, alors les pages d'arrière-plan sont un gaspillage de ressources car elles s'exécuteront en arrière-plan TOUT le temps . Utilisez plutôt les pages d'événements:
"background": {
"scripts": ["script.js"],
"persistent": false
}
vous devez ajouter un fichier d'arrière-plan. mais d'abord vous devez ajouter un attribut dans manifest.json comme,
"background":{
"scripts":["background.js"]
}
nommez maintenant un fichier dans votre dossier d'extension comme background.js il y a un moyen d'envoyer des objets de l'arrière-plan à vos scripts de contenu supposez que votre script de contenu s'appelle content.js alors ce que vous devez faire est d'écrire cet extrait de code dans le fichier background.js
chrome.browserAction.onClicked.addListener(sendfunc);
function sendfunc(tab){
msg={txtt:"execute"};
chrome.tabs.sendMessage(tab.id,msg);
}
ce que le code ci-dessus est en train d'envoyer un objet nommé msg à la page de contenu et cet objet msg a une propriété txtt qui est égale à "exécuter". ce que vous devez faire ensuite est de comparer les valeurs du script de contenu comme
chrome.runtime.onMessage.addListener(recievefunc);
function receivefunc(mssg,sender,sendResponse){
if(mssg.txtt==="execute"){
/*
your code of content script
goes here
*/
}
}
désormais, chaque fois que vous cliquez sur l'icône d'extension, un objet nommé msg est envoyé de l'arrière-plan au contenu. la fonction "recievefunc ()" comparera sa propriété txtt avec la chaîne "execute" si elle correspond à votre reste du code s'exécutera.
note: msg, txtt, sendfunc, receivefunc, mssg sont tous des variables et non des mots-clés chrome afin que vous puissiez utiliser ce que vous voulez.
j'espère que ça aide.
:)