extensión google chrome :: console.log () de la página de fondo?

173

Si llamo console.log('something');desde la página emergente, o cualquier script incluido, funciona bien.

Sin embargo, como la página de fondo no se ejecuta directamente desde la página emergente, no se incluye en la consola.

¿Hay alguna manera de que console.log()aparezca en la página de fondo para aparecer en la consola para la página emergente?

¿hay alguna forma de, desde la página de fondo llamar a una función en la página emergente?

Granizo
fuente
¿Qué quiere decir exactamente al decir "funciona bien"? ¿Dónde estás leyendo "algo"? El uso de console.log () en una ventana emergente no debería imprimirse en la consola de la página cargada, ya que la pregunta tiene 2 años ¿cambió la API?
anddam
14
si hace clic con el botón derecho -> inspeccionar la ventana emergente en la acción de su navegador, obtendrá una página de herramientas para desarrolladores para su extensión. popup.js imprimirá registros para eso.
not_shitashi
El comentario de @ not_shitashi debería ser la respuesta a esta pregunta.
gabe

Respuestas:

154

Cualquier página de extensión (excepto los scripts de contenido ) tiene acceso directo a la página de fondo a través de chrome.extension.getBackgroundPage().

Eso significa que, dentro de la página emergente , puedes hacer lo siguiente:

chrome.extension.getBackgroundPage().console.log('foo');

Para que sea más fácil de usar:

var bkg = chrome.extension.getBackgroundPage();
bkg.console.log('foo');

Ahora, si desea hacer lo mismo dentro de los scripts de contenido , debe usar Pasar mensajes para lograrlo. La razón, ambos pertenecen a diferentes dominios, lo que tiene sentido. Hay muchos ejemplos en la página de Pases de mensajes para que los revises.

Espero que aclare todo.

Mohamed Mansour
fuente
1
@MohamedMansour, esta solución no funciona para mí. Si yo alert() chrome.extension.getBackgroundPage(), lo consigo null. ¿Necesito tener permisos establecidos o alguna otra configuración?
gwg
@gwg ¿su extensión tiene una página de fondo? De acuerdo con la documentación "Devuelve nulo si la extensión no tiene página de fondo". developer.chrome.com/extensions/…
Mohamed Mansour
Esto funciona perfectamente para mis propios mensajes a la consola. Gracias. ¿Alguna idea sobre cómo hacer que las excepciones, etc. de popup.js aparezcan en la consola de background.js?
steven_noble
195

Puede abrir la consola de la página de fondo si hace clic en el enlace "background.html" en la lista de extensiones.

Para acceder a la página de fondo que corresponde a sus extensiones, abra Settings / Extensionso abra una nueva pestaña e ingrese chrome://extensions. Verás algo como esta captura de pantalla.

Diálogo de extensiones de Chrome

Debajo de su extensión, haga clic en el enlace background page. Esto abre una nueva ventana. Para la muestra de menú contextual de la ventana tiene el título: _generated_background_page.html.

serg
fuente
44
Saludos, soy consciente de esto, sin embargo, abrir la página de fondo directamente no invoca nada desde la página emergente.
Hailwood
Abrir la página de fondo no genera ninguna información de registro de la consola.
Layke
@Hailwood al abrir la página de fondo no invoca nada, pero mostrará la consola para la página de fondo.
anddam
1
@Layke una vez que abrió la página de fondo, todavía tiene que escribir en ella, es decir, usar directamente console.log () desde la página de fondo o, como dijo mohamed-mansour, llamar al mismo método en el objeto devuelto por getBackgroundPage ()
anddam
3
Encontré esta pregunta buscando cómo verificar una salida de extensión (como OP) y encontré esta respuesta muy útil ya que me permitió verificar el registro de la consola sin pasar por una página de contenido.
anddam
66

Para responder su pregunta directamente, cuando llama console.log("something")desde el fondo, este mensaje se registra en la consola de la página de fondo. Para verlo, puede ir chrome://extensions/y hacer clic en eso inspect viewdebajo de su extensión.

Cuando hace clic en la ventana emergente, se carga en la página actual, por lo que console.log debería mostrar un mensaje de registro en la página actual.

songyy
fuente
¡Yo también! Es el más simple y directo.
SaidbakR
mi extensión no tiene eso, sin embargo, otras extensiones sí. ¿Cómo lo habilito?
Ahmed Eid
Si tienes 3 monitores como yo ... gira la cabeza. Estaba abriendo ChromeDevTools en el extremo opuesto de mi matriz de monitores y no lo vi.
mpen
26

Todavía puede usar console.log (), pero se registra en una consola separada. Para verlo, haga clic derecho en el icono de extensión y seleccione "Inspeccionar ventana emergente".

Lacho Tomov
fuente
12

La solución más simple sería agregar el siguiente código en la parte superior del archivo. Y de lo contrario, puede utilizar todas las API completas de la consola Chrome como lo haría normalmente.

 console = chrome.extension.getBackgroundPage().console;
// for instance, console.assert(1!=1) will return assertion error
// console.log("msg") ==> prints msg
// etc
dd.
fuente
9
const log = chrome.extension.getBackgroundPage().console.log;
log('something')

Abrir registro:

  • Abierto: chrome: // extensiones /
  • Detalles> Página de fondo
Oh fallante
fuente
¿Te importaría dar más explicaciones a tus comandos?
inetphantom
7

Intente esto, si desea iniciar sesión en la consola de la página activa:

chrome.tabs.executeScript({
    code: 'console.log("addd")'
});
Faz
fuente
1
Requiere permisos de host para la pestaña actual.
Xan
Puede agregarlo para probar y eliminar si libera el complemento.
Faz
1

En relación con la pregunta original, me gustaría agregar a la respuesta aceptada por Mohamed Mansour que también hay una manera de hacer que esto funcione al revés:

Puede acceder a otras páginas de extensión (es decir, página de opciones, página emergente) desde la página de fondo / script con la chrome.extension.getViews()llamada. Como se describe aquí .

 // overwrite the console object with the right one.
var optionsPage = (  chrome.extension.getViews()  
                 &&  (chrome.extension.getViews().length > 1)  ) 
                ? chrome.extension.getViews()[1] : null;

 // safety precaution.
if (optionsPage) {
  var console = optionsPage.console;
}
WoodrowShigeru
fuente
1

Es una publicación antigua, con buenas respuestas, pero agrego mis dos bits. No me gusta usar console.log, prefiero usar un registrador que inicie sesión en la consola, o donde quiera, así que tengo un módulo que define una función de registro un poco como esta

function log(...args) {
  console.log(...args);
  chrome.extension.getBackgroundPage().console.log(...args);
}

Cuando llamo log ("este es mi log") escribirá el mensaje tanto en la consola emergente como en la consola de fondo.

La ventaja es poder cambiar el comportamiento de los registros sin tener que cambiar el código (como deshabilitar los registros para la producción, etc.)

Denis G.
fuente
0

Para obtener un registro de consola de una página de fondo, debe escribir el siguiente fragmento de código en su página de fondo background.js:

chrome.extension.getBackgroundPage (). console.log ('hola');

Luego cargue la extensión e inspeccione su página de fondo para ver el registro de la consola.

¡¡Adelante!!

Anushka Rai
fuente