2009-12-21 11 views
22

Sto provando a creare l'estensione chrome, tuttavia il mio clic su browser action non funziona! Ho provato praticamente tutto. Qui è la mia messa a punto:Chrome Browser Action non funziona

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> 

Ma non importa quanto duramente clicco su l'icona non succede e "HELLO" non viene stampato nella console!

Sto utilizzando Chrome 4.0.249.43. Ho installato la versione beta, ma è esattamente la stessa della versione rilasciata (stesso numero di verion). Potrebbe essere un problema?

risposta

40

Non è possibile avere un "popup" con un evento onclick. Rimuovi il popup.html dal file manifest. E mantieni la pagina di sfondo, e funzionerà.

+5

Questo è corretto. Popup elimina completamente l'evento onclick! Mi ci sono voluti due giorni per capirlo. – drozzy

+1

Qualcuno del team di estensioni di Chrome ha mai sentito parlare di POLA? https://en.wikipedia.org/wiki/Principle_of_least_astonishment – Pacerier

+0

documentazione estensione di Chrome succhia – Legends

0

Secondo il doc:

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

così:

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

dovrebbe funzionare

+0

Dal momento che non ha mai usato o chiamato 'tab', e mai usato context (' this'), questo non farebbe differenza ... –

0

Sei sicuro che si sta visualizzando la console JavaScript corretta per lo sfondo della pagina, e non per l'altra scheda?

Provare ad avere il metodo hello() per impostare una variabile globale nella pagina di sfondo, quindi fare clic su un pulsante in popup.html per recuperare tale variabile (utilizzando chrome.extension.getBackgroundPage()) e visualizzarla come avviso.

+0

Ciao, ho modificato per mostrare che ho provato ad aggiungere l'ascoltatore al popup.html e non funziona neanche ... – drozzy

2

Devi eliminare il popup.html, hai già un popup in popup.html in teoria lo background.html dovrebbe fare l'evento per browserAction ma è sbagliato. Quando hai cliccato sull'icona della tua app, è già stata definita una funzione onClicked in popup.

Non so per quello che ti serve, ma puoi fare molte funzioni quando hai cliccato nel browser.

Per esempio: in background.html fare:

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

e si chiama da popup.html con chrome.extension.getBackgroundPage() foo();.

beh spero che questo ti aiuti.

1

Ho avuto alcuni problemi durante il tentativo di creare un'estensione di Chrome. Assicurati di ricaricare l'estensione dopo qualsiasi modifica a manifest.json o alla pagina di sfondo. Per ricaricarlo, vai alla pagina delle estensioni (chiave> strumenti> estensioni) e scegli ricarica. Potrebbe essere solo la causa del problema, tutto sembra a posto.

Problemi correlati