web-dev-qa-db-fra.com

Exécuter le script à chaque fois Chrome cliquée

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"
  ]
}
57
Endophage

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')});
83
arunkumar

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"]
}
  • Notez que manifest_version doit être là et il doit être 2.
  • Notez que l'autorisation activeTab a été ajoutée.
  • Notez que vous ne pouvez faire qu'une seule chose lorsque vous cliquez sur le bouton d'action du navigateur: soit vous pouvez afficher une fenêtre contextuelle, soit vous pouvez exécuter un script, mais vous ne pouvez pas faire les deux.

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.

49
yogesh kumar

Au lieu de spécifier une page contextuelle, utilisez le chrome.browserAction.onClicked API, documentée ici .

5
Boris Smus

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
}
0
JustAGuy

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.

:)

0
rishuverma