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?


¿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.


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.


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.


¡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".


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

9
const log = chrome.extension.getBackgroundPage().console.log;
log('something')

Abrir registro:

  • Abierto: chrome: // extensiones /
  • Detalles> Página de fondo

¿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")'
});

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;
}

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.)


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!!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.