2011-08-23 12 views
44

¿Cómo escribo una extensión de Chrome de modo que cada vez que un usuario hace clic en el icono, se ejecuta mi secuencia de comandos pero no se abre ninguna ventana emergente? (Yo buscaría esto en los documentos, pero por alguna razón dejaron de funcionar repentinamente, 404en cada página, como llegué hasta este punto).Ejecutar script cada vez que se hace clic en el icono de extensión de Chrome

Supongo que solo está configurando el manifiesto correctamente. Esto es lo que tengo ahora:

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

Respuesta

57

Quitar emergente de su sección browser_action del manifiesto y el uso de background pages junto con browser Action en el guión de fondo.

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

Dónde exactamente pongo esto. Sin mine.html, el único archivo en la extensión es el manifiesto ... bueno, y el ícono. – Endophage

+2

Eche un vistazo a las páginas de fondo: http://code.google.com/chrome/extensions/background_pages.html. Aquí es donde coloca su código de larga ejecución y el código que es común en diferentes páginas. El enlace al documento anterior tiene un ejemplo con browserAction.onClicked – arunkumar

+0

Ah lo tengo. Intenté una página de fondo inicialmente pero no tenía conocimiento de browserAction.onClicked. – Endophage

4

En lugar de especificar una página emergente, utilice la API chrome.browserAction.onClicked, documentado here.

32

En primer lugar, si no desea mostrar una ventana emergente, elimine "popup" : "mine.html" de su manifest.json (que se muestra en la pregunta).

Su manifest.json se verá algo como esto:

{ 
    "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"] 
} 
  • Tenga en cuenta que manifest_version debe estar allí y que debe ser 2.
  • Tenga en cuenta que se ha agregado el permiso activeTab.
  • Tenga en cuenta que solo puede hacer una cosa cuando se hace clic en el botón de acción del navegador: puede mostrar una ventana emergente o puede ejecutar una secuencia de comandos, pero no puede hacer ambas cosas.

En segundo lugar, para ejecutar un script cuando se hace clic en el icono, coloque el siguiente código en el archivo de background.js (el nombre del archivo se especifica en su manifest.json):

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

Por último, testScript.js es donde debe ponga el código que desea ejecutar cuando se hace clic en el icono.

+1

la única manera que funciona correctamente. gracias – myh34d

+3

A partir de febrero de 2017, esta solución cumple exactamente lo que se pidió en la pregunta original. – mjamore

+0

¿Cómo paso la información de la pestaña a "testScript.js"? – kerzek

0

Esto era justo lo que necesitaba pero debo agregar esto: Si todo lo que necesita es un evento único como cuando un usuario hace clic en el icono de la extensión, Background Pages es un desperdicio de recursos, ya que se ejecutará en el fondo TODO el tiempo. Use Event Pages en su lugar:

"background": { 
     "scripts": ["script.js"], 
     "persistent": false 
     } 
Cuestiones relacionadas