2012-07-15 9 views
22

Sto scrivendo un'estensione per Chrome che mi reindirizzerà a un URL quando si fa clic sull'icona di azione del browser.Perché chrome.browserAction.onClicked undefined?

Sto cercando di usare:

chrome.browserAction.onClicked.addListener 

ma ottengo

Uncaught TypeError: Cannot read property 'onClicked' of undefined

Questo è il mio file manifesto:

{ 
    "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" 
    } 
} 

Questo è il mio file js:

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

risposta

15

Sembra che il codice sia nel file twterland.js, che è lo script di contenuto. browserAction può essere utilizzato solo nelle pagine di estensione, quindi non è possibile utilizzarlo negli script di contenuto.

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

metterlo sul posto il background page.

25

Per coloro che hanno già aggiunto qualcosa come

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

e viene comunque Cannot read property 'onClicked' of undefined - basta aggiungere

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

nella vostra manifest.json

+5

È pazzesco ma funziona – syonip

+1

Questo è in realtà il mio problema. La mia sceneggiatura era già di base. È solo che non ho mai dichiarato alcun 'browser_action' per cominciare. –

+3

'" browser_action ": {}' è sufficiente – Pacerier

7

Se non si dispone di una proprietà "browser_action" definito nel tuo manifest.json quindi potrebbe verificarsi questo errore. @ La risposta di Kirill funziona ma devi anche aggiungere un file vuoto icon.png, altrimenti Chrome genererà un errore che non riesce a trovare un tale file.

L'aggiunta di questo al file manifest.jsondovrebbe sopprimere questo è errore:

"browser_action": {} 

Leggere il documentation for further reference su come utilizzare l'impostazione "browser_action".

+0

Ho definito browser_action nel mio manifest, ancora 'chrome.pageAction' non è definito nel mio script di sfondo –

+0

@AlexanderMills La domanda originale riguardava' chrome.browserAction' quindi io non sono sicuro di 'pageAction'. – Sgnl

+0

oh mio male, hai ragione –

1

ero anche ottenendo questo, aggiungendo

"persistent": true 

alla mia dichiarazione di background in manifest.json risolto.

Problemi correlati