2009-12-21 22 views
22

Estoy tratando de crear una extensión de cromo, sin embargo mi browser action clic no funciona. He intentado casi todo. Aquí está mi configuración:Acción del navegador Chrome no funciona

manifest.json:

{ 
"name": "blah", 
"version": "1.0", 
"description": "blah", 
"browser_action": { 
    "default_icon": "icon1.png", 
    "popup": "popup.html" 
}, 
"permissions": [ 
    "bookmarks", 
    "tabs", 
    "http://*/*", 
    "https://*/*"  
], 
"background_page": "background.html" 
} 

popup.html:

<html> 
<head> 
<script> 
<!-- Try adding the listener in popup.html --> 
    chrome.browserAction.onClicked.addListener(function(tab){ 
    console.log("Hello from popup"); // This does not show up either 
    }); 
</script> 
</head><body> 
Hello 
</body> 
</html> 

background.html:

<html> 
<head> 
<script> 
console.log("Background.html"); // This gets displayed. O.K. 

function hello() { 
    console.log("HELLO"); // THIS NEVER GETS DISPLAYED 
} 

// Supposed to Called when the user clicks on the browser action icon. 
chrome.browserAction.onClicked.addListener(hello); 
</script> 
</head> 
</html> 

Pero no importa lo difícil que haga clic en el ícono no sucede y "HOLA" no se imprime en la consola.

Estoy usando Chrome 4.0.249.43. Instalé la versión Beta PERO es exactamente la misma que la versión lanzada (el mismo número de versión). Podria esto ser un problema?

Respuesta

40

No puede tener una "ventana emergente" con un evento onclick. Elimine popup.html del archivo de manifiesto. Y mantén la página de fondo, y funcionará.

+5

Eso es correcto. ¡Popup elimina por completo el evento onclick! Me tomó dos días darme cuenta de eso. – drozzy

+1

¿Alguno de los integrantes del equipo de extensión de Chrome se enteró de POLA? https://en.wikipedia.org/wiki/Principle_of_least_astonishment – Pacerier

+0

La documentación de extensión de Chrome es una mierda – Legends

0

De acuerdo con la doc:

chrome.browserAction.onClicked.addListener(function(Tab tab) {...}); 

manera:

// Supposed to be called when the user clicks on the browser action icon.  
chrome.browserAction.onClicked.addListener(function(tab) { 
    hello(); 
}); 

deben trabajar

+0

Dado que él nunca usó ni llamó 'tab', y nunca utilizó el contexto (' this'), esto no haría ninguna diferencia ... –

0

¿Estás seguro de que está viendo la consola correcta JavaScript para la página de fondo, y no para la otra pestaña?

Intente tener su método hello() establezca una variable global en la página de fondo, luego tenga un botón en popup.html recupere esa variable (usando chrome.extension.getBackgroundPage()) y muéstrela como una alerta.

+0

Hola, edité para mostrar que traté de agregar el oyente al popup.html y tampoco funciona ... – drozzy

2

Necesita eliminar el popup.html, ya tiene una ventana emergente en popup.html en teoría el background.html debería hacer el evento para browserAction pero está mal. Cuando hizo clic en el ícono de su aplicación, ya se definió una función enClicken in popup.

no sé lo que necesita, pero puede hacer muchas funciones cuando hace clic en el navegador.

Por ejemplo: en background.html hacer:

foo(){ 
     if(browserAction && browserAction.onClicked) // you can add all stuff that you need. 
     do something 
    } 

y llama desde popup.html con chrome.extension.getBackgroundPage() foo();.

bueno, espero que esto te ayude.

1

Tuve algunos problemas también al tratar de crear una extensión de cromo. Asegúrese de volver a cargar la extensión después de cualquier cambio en manifest.json o en la página de fondo. Para volver a cargarlo, vaya a la página de extensiones (llave> herramientas> extensiones) y elija volver a cargar. Esa podría ser la causa del problema, todo lo demás parece estar bien.

Cuestiones relacionadas