wake-up-neo.com

google chrome extension :: console.log () von der Hintergrundseite?

Wenn ich console.log('something'); von der Popup-Seite oder einem anderen Skript aus anrufe, funktioniert es gut.

Da die Hintergrundseite jedoch nicht direkt von der Popup-Seite ausgeführt wird, ist sie nicht in der Konsole enthalten.

Gibt es eine Möglichkeit, console.log()s auf der Hintergrundseite in der Konsole für die Popup-Seite anzuzeigen?

gibt es eine Möglichkeit, von der Hintergrundseite aus eine Funktion in der Popup-Seite aufzurufen?

147
Hailwood

Jede Erweiterungsseite (außer content scripts ) hat direkten Zugriff auf die Hintergrundseite über chrome.extension.getBackgroundPage() .

Das heißt, innerhalb der popup-Seite können Sie einfach Folgendes tun:

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

Um die Verwendung zu erleichtern:

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

Wenn Sie dasselbe innerhalb von content scripts tun möchten, müssen Sie Message Passing verwenden, um dies zu erreichen. Der Grund, beide gehören zu unterschiedlichen Domänen, was Sinn macht. Auf der Seite Message Passing finden Sie viele Beispiele, die Sie auschecken können.

Hoffe das klärt alles.

126
Mohamed Mansour

Sie können die Konsole der Hintergrundseite öffnen, indem Sie in der Erweiterungsliste auf den Link "background.html" klicken.

Um auf die Hintergrundseite zuzugreifen, die Ihren Erweiterungen entspricht, öffnen Sie Settings / Extensions oder öffnen Sie eine neue Registerkarte und geben Sie chrome://extensions ein. Sie sehen so etwas wie diesen Screenshot. 

Chrome extensions dialogue

Klicken Sie unter Ihrer Erweiterung auf den Link background page. Dies öffnet ein neues Fenster. Für das Kontextmenü-Beispiel hat das Fenster den Titel: _generated_background_page.html.

171
serg

Um Ihre Frage direkt zu beantworten, wird diese Nachricht beim Aufruf von console.log("something") aus dem Hintergrund in der Konsole der Hintergrundseite protokolliert. Um es anzuzeigen, gehen Sie zu chrome://extensions/ und klicken Sie auf das inspect view unter Ihrer Erweiterung.

Wenn Sie auf das Popup klicken, wird es in die aktuelle Seite geladen. Daher sollte die Konsole.log auf der aktuellen Seite eine Protokollmeldung anzeigen.

55
songyy

Sie können trotzdem console.log () verwenden, aber es wird in einer separaten Konsole angemeldet. Um es anzuzeigen, klicken Sie mit der rechten Maustaste auf das Erweiterungssymbol und wählen Sie "Popup prüfen".

22
Lacho Tomov

Die einfachste Lösung wäre, den folgenden Code oben in die Datei einzufügen. Und dann können Sie die gesamte Chrome-Konsole api wie gewohnt verwenden.

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

Versuchen Sie Folgendes, wenn Sie sich bei der Konsole der aktiven Seite anmelden möchten:

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

In Bezug auf die ursprüngliche Frage möchte ich der akzeptierten Antwort von Mohamed Mansour hinzufügen, dass es auch eine Möglichkeit gibt, diese Arbeit umgekehrt zu machen:

Auf andere Erweiterungsseiten (d. H. Optionsseite, Popup-Seite) können Sie mit innerhalb der Hintergrundseite/script mit dem Aufruf chrome.extension.getViews() zugreifen. Wie beschrieben hier .

 // 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
WoodrowShigeru
const log = chrome.extension.getBackgroundPage().console.log;
log('something')

Geöffnetes Protokoll:

  • Öffnen: Chrome: // Erweiterungen /
  • Details> Hintergrundseite
0
O Fallante

Es ist ein alter Beitrag mit guten Antworten, aber ich füge meine zwei Bits hinzu. Ich benutze nicht gerne console.log, ich benutze lieber einen Logger, der sich an der Konsole anmeldet, oder wo immer ich will, also habe ich ein Modul, das eine Protokollfunktion ähnlich dieser definiert

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

Wenn ich ein Protokoll anrufe ("dies ist mein Protokoll"), wird die Nachricht sowohl in die Popup-Konsole als auch in die Hintergrundkonsole geschrieben.

Der Vorteil ist, dass Sie das Verhalten der Protokolle ändern können, ohne den Code ändern zu müssen (z. B. Deaktivieren der Protokolle für die Produktion usw.).

0
Denis G.