2011-08-23 25 views
44

Come si scrive un'estensione di Chrome in modo tale che ogni volta che un utente fa clic sull'icona, il mio script viene eseguito ma non viene aperto alcun popup? (Lo guarderei io stesso nei documenti, ma per qualche ragione hanno improvvisamente smesso di funzionare, 404 su ogni pagina, come sono arrivato a questo punto).Esegui script ogni volta che si fa clic sull'icona di estensione di Chrome

Suppongo che si stia configurando correttamente il manifest. Ecco quello che ho adesso:

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "description": "Does some simple stuff", 
    "browser_action": { 
    "popup" : "mine.html", 
    "default_icon": "logo.png" 
    }, 
    "permissions": [ 
    "notifications" 
    ] 
} 

risposta

57

Rimuovere popup dalla vostra sezione browser_action del manifesto e utilizzare background pages insieme browser Action nello script di sfondo.

chrome.browserAction.onClicked.addListener(function(tab) { alert('icon clicked')}); 
+7

Dove esattamente lo metto. Senza mine.html l'unico file nell'estensione è manifest ... beh, e l'icona. – Endophage

+2

Dai un'occhiata alle pagine di sfondo - http://code.google.com/chrome/extensions/background_pages.html. Questo è il posto in cui posizioni il codice e il codice long che è comune su diverse pagine. Il link al documento sopra ha un esempio con browserAction.onClicked – arunkumar

+0

Ah capito. Ho provato inizialmente una pagina di sfondo ma non ero a conoscenza del browserAction.onClicked. – Endophage

4

Invece di specificare una pagina popup, utilizzare l'API chrome.browserAction.onClicked, documentata here.

32

Innanzitutto, se non si desidera visualizzare un popup, rimuovere "popup" : "mine.html" dal numero manifest.json (visualizzato nella domanda).

tuo manifest.json sarà simile a questo:

{ 
    "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"] 
} 
  • noti che manifest_version deve esserci e deve essere 2.
  • Si noti che il permesso activeTab è stato aggiunto.
  • Si noti che è possibile fare una sola cosa quando si fa clic sul pulsante di azione del browser: è possibile visualizzare un popup oppure è possibile eseguire uno script, ma non è possibile eseguire entrambe le operazioni.

In secondo luogo, per eseguire uno script quando l'icona viene cliccato, inserire il codice qui sotto nel file background.js (il nome del file è specificato nel vostro manifest.json):

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: "testScript.js"}); 
}); 

Infine, testScript.js è dove si dovrebbe inserire il codice che si desidera eseguire quando si fa clic sull'icona.

+1

l'unico modo che funziona correttamente. grazie – myh34d

+3

A partire da febbraio 2017, questa soluzione realizza esattamente ciò che è stato chiesto nella domanda originale. – mjamore

+0

Come passare le informazioni della scheda a "testScript.js"? – kerzek

0

Questo era proprio quello di cui avevo bisogno ma dovrei aggiungere questo: Se tutto ciò che serve è un evento occasionale come quando un utente fa clic sull'icona dell'estensione, quindi Pagine di sfondo è uno spreco di risorse dato che verrà eseguito in lo sfondo TUTTO il tempo. Usa invece Pagine evento:

"background": { 
     "scripts": ["script.js"], 
     "persistent": false 
     } 
Problemi correlati