alon mahl
Estoy escribiendo una extensión de Chrome que me redirigirá a una URL al hacer clic en el ícono de acción del navegador.
Estoy tratando de usar:
chrome.browserAction.onClicked.addListener
pero lo consigo
TypeError no capturado: no se puede leer la propiedad ‘onClicked’ de indefinido
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"); });
Cirilo Oficerov
ManifiestoV3
manifiesto.json: agregar action
(no browser_action
), véase también el guía de migración.
"action": {},
"background": {"service_worker": "background.js"},
fondo.js: usar chrome.action
no chrome.browserAction
.
Manifiesto clásico V2
Para aquellos que ya han agregado algo como
"background": {
"scripts": ["background.js"]
}
y todavía consigue Cannot read property 'onClicked' of undefined
– solo agrega
"browser_action": {}
en su manifest.json
-
Este es en realidad mi problema. Mi guión ya estaba en segundo plano. Es solo que nunca he declarado ninguna
browser_action
para empezar.– Lucas Vo
11 de febrero de 2017 a las 7:32
-
"browser_action": {}
es suficiente– Pacerier
7 de agosto de 2017 a las 15:34
-
¿¿¿¿¿¿¿¿¿Por qué????????? Esto no tiene sentido… Cambié el icono a otro archivo y no se pudo ejecutar. ¡Lo cambio de nuevo a icon.png y todo está bien! Gracias, pero realmente me estoy rascando la cabeza…
– birwin
6 sep 2017 a las 21:49
-
Lo mismo para page_action
– Illidan
1 de marzo de 2021 a las 16:04
-
esto no funcionaría si la versión del manifiesto es 3
–Yash Kumar Verma
26 de diciembre de 2021 a las 4:05
Derek 朕會功夫
Parece que el código está en tu twterland.js
archivo, 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
Sin embargo, los scripts de contenido tienen algunas limitaciones. Ellos no pueden:
– Utilice Chrome.* API (excepto para partes de chrome.extension)
– Usar variables o funciones definidas por las páginas de su extensión
– Usar variables o funciones definidas por páginas web o por otros scripts de contenido
ponlo en el pagina de fondo en cambio.
-
El enlace a la “página de fondo” está muerto.
– Philippe-André Lorin
13 de julio de 2022 a las 10:42
Si no tienes un "browser_action"
propiedad definida en su manifest.json
entonces este error puede ocurrir. La respuesta de @Kirill funciona, pero también debe agregar un espacio en blanco icon.png
archivo de lo contrario, Chrome arrojará un error de que no puede encontrar dicho archivo.
Agregando esto a la manifest.json
archivo debería suprimir este es un error:
"browser_action": {}
Asegúrese de leer el documentación para mayor referencia sobre cómo usar el "browser_action"
configuración.
-
Tengo browser_action definido en mi manifiesto, todavía
chrome.pageAction
no está definido en mi script de fondo– Alejandro Mills
8 de enero de 2018 a las 19:54
-
@AlexanderMills La pregunta original era sobre
chrome.browserAction
así que no estoy seguro depageAction
.– Señal
08/01/2018 a las 20:15
-
También tuve que quitar y reinstalar la extensión.
– Evanss
8 de enero de 2021 a las 15:24
El mismo problema puede aparecer si está utilizando manifest_version 3. En este caso
- “background.scripts” debe reemplazarse por “background.service_worker”
- “browser_action” debe reemplazarse por “acción”
- en el código js, chrome.browserAction debe reemplazarse con chrome.action
la información detallada se puede encontrar aquí: Documentación de migración de la versión 3 del manifiesto
También estaba recibiendo esto, agregando
"persistent": true
a mi declaración de antecedentes en manifest.json lo resolvió.
-
Si bien esto “resuelve” la situación, aparentemente hay bastantes razones no tener
"persistent": true
por lo que no es una solución ideal.– Anton Of The Woods
18 de septiembre de 2020 a las 8:31
-
Tenga en cuenta que si su extensión de Chrome usa la Versión 3 en el Manifiesto, esta característica no existirá.
–Raleigh L.
10 de enero de 2022 a las 23:44
HasanAboShally
Tenga en cuenta que sólo puede lanzar uno de app
, browser_action
, page_actions
presente en su archivo manifest.json.
Por ejemplo, para usar el chrome.browserAction.setBadgeText deberías tener el browser_action
campo en su manifest.json.
-
Si bien esto “resuelve” la situación, aparentemente hay bastantes razones no tener
"persistent": true
por lo que no es una solución ideal.– Anton Of The Woods
18 de septiembre de 2020 a las 8:31
-
Tenga en cuenta que si su extensión de Chrome usa la Versión 3 en el Manifiesto, esta característica no existirá.
–Raleigh L.
10 de enero de 2022 a las 23:44
Vinayak Bansal
Asegúrese de que no tengamos jquery.js antes de background.js en la matriz de scripts de background en manifest.json.
"background": {
"scripts": ["background.js","jquery.js"]
}