web-dev-qa-db-fra.com

google chrome extension :: console.log () depuis la page d’arrière-plan?

Si j'appelle console.log('something'); à partir de la page contextuelle, ou de tout script inclus, cela fonctionne bien.

Toutefois, comme la page d’arrière-plan n’est pas directement exécutée à partir de la page contextuelle, elle n’est pas incluse dans la console.

Existe-t-il un moyen d’afficher la fonction console.log() dans la page d’arrière-plan dans la console pour la page contextuelle?

y a-t-il un moyen de, depuis la page d'arrière-plan, appeler une fonction dans la page contextuelle?

147
Hailwood

Toute page extension (sauf scripts de contenu ) a un accès direct à la page d'arrière-plan via chrome.extension.getBackgroundPage() .

Cela signifie que, dans la popup page , vous pouvez simplement faire:

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

Pour faciliter son utilisation:

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

Maintenant, si vous voulez faire la même chose dans les scripts de contenu vous devez utiliser Message Passing pour y parvenir. La raison, ils appartiennent tous deux à des domaines différents, ce qui fait sens. Il existe de nombreux exemples dans la page Message Passing à consulter.

J'espère que tout efface.

126
Mohamed Mansour

Vous pouvez ouvrir la console de la page d’arrière-plan si vous cliquez sur le lien "background.html" dans la liste des extensions.

Pour accéder à la page d'arrière-plan correspondant à vos extensions, ouvrez Settings / Extensions ou ouvrez un nouvel onglet et entrez chrome://extensions. Vous verrez quelque chose comme cette capture d'écran. 

Chrome extensions dialogue

Sous votre extension, cliquez sur le lien background page. Ceci ouvre une nouvelle fenêtre. Pour l'exemple de menu contextuel , la fenêtre a pour titre: _generated_background_page.html.

171
serg

Pour répondre directement à votre question, lorsque vous appelez console.log("something") à partir de l’arrière-plan, ce message est enregistré sur la console de la page d’arrière-plan. Pour le voir, vous pouvez aller à chrome://extensions/ et cliquer sur ce inspect view sous votre extension.

Lorsque vous cliquez sur la fenêtre contextuelle, celle-ci est chargée dans la page en cours. Le fichier console.log doit donc afficher le message de journal dans la page en cours.

55
songyy

Vous pouvez toujours utiliser console.log (), mais il sera connecté à une console séparée . Pour le visualiser, cliquez avec le bouton droit de la souris sur l'icône de l'extension et sélectionnez "Contrôler le menu contextuel".

22
Lacho Tomov

La solution la plus simple consisterait à ajouter le code suivant en haut du fichier. Et que vous pouvez utiliser tous les/complet Chrome console api comme vous le feriez normalement.

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

Essayez ceci si vous voulez vous connecter à la console de la page active:

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

En ce qui concerne la question initiale, je voudrais ajouter à la réponse acceptée de Mohamed Mansour qu'il existe également un moyen de faire fonctionner ce travail dans l'autre sens:

Vous pouvez accéder à d'autres pages d'extension (page d'options, page contextuelle) à partir de dans la page d'arrière-plan/script avec l'appel chrome.extension.getViews(). Comme décrit ici .

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

Ouvrir le journal:

  • Ouvrir: chrome: // extensions /
  • Détails> Background page
0
O Fallante

C'est un ancien post, avec déjà de bonnes réponses, mais j'ajoute mes deux bits. Je n'aime pas utiliser console.log, je préfère utiliser un enregistreur qui se connecte à la console ou à l'endroit souhaité, alors j'ai un module définissant une fonction de journalisation un peu comme celle-ci

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

Lorsque j'appelle log ("ceci est mon journal"), le message est écrit à la fois dans la console contextuelle et dans la console d'arrière-plan.

L'avantage est de pouvoir changer le comportement des journaux sans avoir à changer le code (comme désactiver les journaux pour la production, etc.)

0
Denis G.