estensione google chrome :: console.log () dalla pagina di sfondo?


173

Se chiamo console.log('something');dalla pagina popup, o qualsiasi script incluso, funziona bene.

Tuttavia, poiché la pagina di sfondo non viene eseguita direttamente dalla pagina popup, non è inclusa nella console.

C'è un modo in cui posso trovare quelli console.log()nella pagina di sfondo da mostrare nella console per la pagina popup?

c'è un modo per, dalla pagina di sfondo chiamare una funzione nella pagina popup?


Cosa intendi esattamente dicendo "funziona benissimo"? Dove stanno leggendo "qualcosa"? L'uso di console.log () in una finestra popup non dovrebbe essere stampato nella console della pagina caricata, poiché la domanda ha 2 anni è cambiata l'API?
anddam,

14
se fai clic con il pulsante destro del mouse -> ispeziona popup sull'azione del browser, otterrai una pagina di strumenti per sviluppatori per la tua estensione. popup.js stamperà i log su quello.
not_shitashi,

Il commento di @ not_shitashi dovrebbe essere la risposta a questa domanda.
Gabe

Risposte:


154

Qualsiasi pagina di estensione (tranne gli script di contenuto ) ha accesso diretto alla pagina di sfondo tramite chrome.extension.getBackgroundPage().

Ciò significa che, nella pagina popup , puoi semplicemente fare:

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

Per facilitarne l'uso:

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

Ora, se vuoi fare lo stesso con gli script dei contenuti, devi usare Message Passing per raggiungere questo obiettivo. Il motivo, entrambi appartengono a domini diversi, che hanno senso. Ci sono molti esempi nella pagina di passaggio dei messaggi da provare .

Spero che cancella tutto.


1
@MohamedMansour, questa soluzione non funziona per me. Se alert() chrome.extension.getBackgroundPage()lo capisco null. Devo avere le autorizzazioni impostate o qualche altra configurazione?
Gwg

@gwg la tua estensione ha una pagina di sfondo? Secondo la documentazione "Restituisce null se l'estensione non ha una pagina di sfondo." developer.chrome.com/extensions/…
Mohamed Mansour il

Questo funziona perfettamente per i miei messaggi da console. Grazie. Qualche idea su come fare anche eccezioni da popup.js nella console di background.js?
steven_noble,

195

Puoi aprire la console della pagina di sfondo facendo clic sul link "background.html" nell'elenco delle estensioni.

Per accedere alla pagina di sfondo corrispondente alle tue estensioni, apri Settings / Extensionso apri una nuova scheda e inserisci chrome://extensions. Vedrai qualcosa di simile a questo screenshot.

Finestra di dialogo delle estensioni di Chrome

Sotto la tua estensione fai clic sul link background page. Questo apre una nuova finestra. Per il campione di menu contestuale della finestra ha il titolo: _generated_background_page.html.


4
Saluti, ne sono consapevole, tuttavia l'apertura diretta della pagina di sfondo non invoca nulla dalla pagina popup.
Hailwood,

L'apertura della pagina in background non genera alcuna informazione sulla registrazione della console.
Layke,

@Hailwood aprendo la pagina di sfondo non invoca nulla ma mostrerà la console per la pagina di sfondo.
anddam,

1
@Layke una volta che hai aperto la pagina di sfondo devi ancora scrivere in essa, cioè usare direttamente console.log () dalla pagina di sfondo o, come ha detto mohamed-mansour, chiamando lo stesso metodo sull'oggetto restituito da getBackgroundPage ()
anddam

3
Ho trovato questa domanda cercando come controllare un output di estensione (come OP) e ho trovato questa risposta molto utile poiché mi ha permesso di controllare la registrazione della console senza passare attraverso una pagina di contenuto.
anddam,

66

Per rispondere direttamente alla tua domanda, quando chiami console.log("something")dallo sfondo, questo messaggio viene registrato nella console della pagina in background. Per vederlo, puoi andare su chrome://extensions/e fare clic su quelloinspect view sotto l'estensione.

Quando si fa clic sul popup, viene caricato nella pagina corrente, quindi console.log dovrebbe mostrare il messaggio di registro nella pagina corrente.


Anch'io! È il più semplice e diretto.
SaidbakR,

la mia estensione non ce l'ha, altre lo fanno comunque! come posso abilitarlo
Ahmed Eid,

Se hai 3 monitor come me ... ruota la testa. Stava aprendo ChromeDevTools sull'estremità opposta del mio array di monitor e non l'ho visto.
mpen

26

Puoi ancora usare console.log (), ma viene registrato in una console separata. Per visualizzarlo, fai clic con il tasto destro sull'icona dell'estensione e seleziona "Controlla popup".


12

La soluzione più semplice sarebbe quella di aggiungere il seguente codice nella parte superiore del file. E poi puoi usare tutte le API complete della console Chrome come faresti 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')

Apri registro:

  • Aperto: chrome: // extensions /
  • Dettagli> Pagina di sfondo

Ti dispiacerebbe fornire qualche spiegazione in più ai tuoi comandi?
Inetphantom,

7

Prova questo, se vuoi accedere alla console della pagina attiva:

chrome.tabs.executeScript({
    code: 'console.log("addd")'
});

1
Richiede le autorizzazioni host per la scheda corrente.
Xan,

È possibile aggiungerlo per il test e rimuoverlo se si rilascia il componente aggiuntivo.
Faz

1

In relazione alla domanda originale, vorrei aggiungere alla risposta accettata da Mohamed Mansour che esiste anche un modo per farlo funzionare al contrario:

È possibile accedere ad altre pagine di interni (ad es. Pagina di opzioni, pagina popup) dall'interno della pagina di sfondo / script con la chrome.extension.getViews()chiamata. Come descritto qui .

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

È un vecchio post, con già buone risposte, ma aggiungo i miei due bit. Non mi piace usare console.log, preferirei usare un logger che accede alla console o dove voglio, quindi ho un modulo che definisce una funzione di registro un po 'come questa

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

Quando chiamo registro ("questo è il mio registro") scriverà il messaggio sia nella console popup che nella console in background.

Il vantaggio è di poter cambiare il comportamento dei log senza dover cambiare il codice (come disabilitare i log per la produzione, ecc ...)


0

Per ottenere un registro della console da una pagina di sfondo devi scrivere il seguente frammento di codice nella tua pagina di sfondo background.js -

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

Quindi caricare l'estensione e ispezionare la sua pagina di sfondo per vedere il registro della console.

Vai avanti!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.