web-dev-qa-db-fra.com

Pourquoi chrome.browserAction.onClicked est-il indéfini?

J'écris une extension Chrome qui me redirigera vers une URL en cliquant sur l'icône d'action du navigateur.

J'essaie d'utiliser:

chrome.browserAction.onClicked.addListener

mais je reçois

Uncaught TypeError: Impossible de lire la propriété 'onClicked' of undefined

Ceci est mon fichier manifeste:

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

Ceci est mon fichier js:

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

Il semble que le code se trouve dans votre fichier twterland.js, qui est votre script de contenu. browserAction ne peut être utilisé que dans les pages d'extension, vous ne pouvez donc pas l'utiliser dans les scripts de contenu.

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

Cependant, les scripts de contenu ont certaines limites. Ils ne peuvent pas :
- Utilisez chrome. * APIs (sauf pour les parties de chrome.extension)
- Utilise des variables ou des fonctions définies par les pages de leur extension
- Utiliser des variables ou des fonctions définies par des pages Web ou par d'autres scripts de contenu

Mettez-le sur la page d’arrière-plan à la place.

17
Derek 朕會功夫

Pour ceux qui ont déjà ajouté quelque chose comme

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

et obtient toujours Cannot read property 'onClicked' of undefined - il suffit d'ajouter 

"browser_action": {}

dans votre manifeste.json

edit: merci @Pacerier pour son commentaire, j'ai changé ma réponse

58
Kirill Oficerov

Si vous n'avez pas de propriété "browser_action" définie dans votre manifest.json, cette erreur peut se produire. La réponse de @ Kirill fonctionne, mais vous devez également ajouter un fichier icon.png vierge, sinon chrome émettra une erreur indiquant qu'il ne peut pas trouver un tel fichier. 

Ajouter ceci au fichier manifest.json devrait supprime ceci est une erreur:

"browser_action": {}

Assurez-vous de lire la documentation pour une référence ultérieure sur l'utilisation du paramètre "browser_action".

9
Sgnl

Je recevais aussi cela, en ajoutant 

"persistent": true 

à ma déclaration d'arrière-plan dans manifest.json résolu.

1
Fergal Moran