2012-07-15 42 views
22

Escribo una extensión de Chrome que me redirigirá a una URL al hacer clic en el icono de acción del navegador.¿Por qué chrome.browserAction.onClicked undefined?

Estoy tratando de utilizar:

chrome.browserAction.onClicked.addListener 

pero me da

Uncaught TypeError: Cannot read property 'onClicked' of undefined

Este es mi archivo de manifiesto:

{ 
    "name": "first extension", 
    "version": "2.2.12", 
    "description": "redirct to a link icon", 
    "browser_action": { 
     "default_icon": "icontest.png", 
     "default_title": "Do action" 
    }, 
    "permissions": ["tabs", "http://*/*"], 
    "content_scripts": [{ 
     "matches": ["http://*.twitter.com/*", "https://*.twitter.com/*"], 
     "js": ["twterland.js"] 
    }], 
    "icons": { 
     "16": "icontest.png", 
     "48": "icontest.png", 
     "128": "icontest.png" 
    } 
} 

Este es mi archivo JS:

chrome.browserAction.onClicked.addListener(function(tab) { alert("hi"); }); 

Respuesta

15

Parece que el código está en su archivo twterland.js, que es su secuencia de comandos de contenido. browserAction solo se puede usar en páginas de extensión, por lo que no puede usarlo en scripts de contenido.

documento: https://developer.chrome.com/extensions/content_scripts

However, content scripts have some limitations. They cannot:
- Use chrome.* APIs (except for parts of chrome.extension)
- Use variables or functions defined by their extension's pages
- Use variables or functions defined by web pages or by other content scripts

lo puso en el lugar background page.

25

Para aquellos que ya han añadido algo así como

"background": { 
    "scripts": ["background.js"] 
} 

y todavía se pone Cannot read property 'onClicked' of undefined - sólo tiene que añadir

"browser_action": { 
    "default_icon": "icon.png" 
} 

en su manifest.json

+5

Es loco pero funciona – syonip

+1

Este es en realidad mi problema. Mi script ya estaba en segundo plano. Es solo que nunca he declarado ninguna 'browser_action' para empezar. –

+3

'" browser_action ": {}' es suficiente – Pacerier

7

Si usted no tiene una propiedad "browser_action" definido en su manifest.json, entonces este error puede ocurrir. La respuesta de @Kirill funciona, pero también tiene que agregar un archivo en blanco icon.png, de lo contrario, Chrome arrojará un error que indica que no puede encontrar dicho archivo.

La adición de este al archivo manifest.json debería suprimir este es el error:

"browser_action": {} 

Asegúrese de leer la documentation for further reference sobre cómo utilizar la configuración "browser_action".

+0

Tengo browser_action definido en mi manifiesto, todavía 'chrome.pageAction' no está definido en mi script de fondo –

+0

@AlexanderMills La pregunta original era sobre' chrome.browserAction', así que No estoy seguro acerca de 'pageAction'. – Sgnl

+0

oh mi malo, tienes razón –

1

También conseguía esto, añadiendo

"persistent": true 

a mi declaración de antecedentes en manifest.json resuelto.

Cuestiones relacionadas