Расширение Google Chrome :: console.log () с фоновой страницы? - PullRequest
152 голосов
/ 30 сентября 2010

Если я вызываю console.log('something'); со страницы всплывающего окна или любой другой скрипт включен, то он работает нормально.

Однако, поскольку фоновая страница не запускается напрямую со всплывающей страницы, она не включается в консоль.

Есть ли способ получить console.log() на фоновой странице для отображения в консоли для всплывающей страницы?

есть ли способ, из фонаВызов функции на всплывающей странице?

Ответы [ 9 ]

176 голосов
/ 30 сентября 2010

Вы можете открыть консоль фоновой страницы, если щелкнете по ссылке «background.html» в списке расширений.

Чтобы получить доступ к фоновой странице, соответствующей вашим расширениям, откройте Settings / Extensions или откройте новую вкладку и введите chrome://extensions. Вы увидите что-то вроде этого скриншота.

Chrome extensions dialogue

Под своим расширением нажмите на ссылку background page. Это открывает новое окно. Для образца контекстного меню окно имеет заголовок: _generated_background_page.html.

132 голосов
/ 30 сентября 2010

Любая страница расширения (кроме скриптов содержимого ) имеет прямой доступ к фоновой странице через chrome.extension.getBackgroundPage().

Это означает, что на всплывающей странице вы можете просто сделать:

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

Чтобы упростить использование:

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

Теперь, если вы хотите сделать то же самое в скриптах содержимого , вам нужно использовать Message Passing для достижения этой цели. Причина в том, что они оба принадлежат к разным доменам, что имеет смысл. На странице Передача сообщений есть много примеров, которые вы можете проверить.

Надеюсь, что все прояснит.

58 голосов
/ 25 июня 2013

Чтобы ответить на ваш вопрос напрямую, когда вы звоните console.log("something") из фона, это сообщение записывается в консоль фоновой страницы. Чтобы просмотреть его, перейдите на chrome://extensions/ и нажмите на inspect view под своим расширением.

Когда вы щелкаете по всплывающему окну, оно загружается на текущую страницу, поэтому console.log должен показывать сообщение журнала на текущей странице.

22 голосов
/ 10 октября 2013

Вы все еще можете использовать console.log (), но он регистрируется в отдельной консоли.Чтобы просмотреть его - щелкните правой кнопкой мыши значок расширения и выберите «Проверить всплывающее окно».

11 голосов
/ 16 апреля 2013

Самое простое решение - добавить следующий код в начало файла. А потом вы можете использовать все полноценные консоли Chrome API , как обычно.

 console = chrome.extension.getBackgroundPage().console;
// for instance, console.assert(1!=1) will return assertion error
// console.log("msg") ==> prints msg
// etc
6 голосов
/ 11 августа 2014

Попробуйте, если хотите войти в консоль активной страницы:

chrome.tabs.executeScript({
    code: 'console.log("addd")'
});
2 голосов
/ 12 февраля 2019
const log = chrome.extension.getBackgroundPage().console.log;
log('something')

Открыть журнал:

  • Открыть: chrome: // extensions /
  • Подробнее> Страница фона
1 голос
/ 02 мая 2018

Это старый пост с уже хорошими ответами, но я добавляю свои два бита.Я не люблю использовать console.log, я бы предпочел использовать регистратор, который регистрирует данные на консоли, или где угодно, поэтому у меня есть модуль, определяющий функцию журнала, немного похожую на эту

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

Когда я вызываю журнал («это мой журнал»), он напишет сообщение как во всплывающей консоли, так и в фоновой консоли.

Преимущество состоит в возможности изменять поведение журналов без необходимостиизменить код (например, отключение журналов для производства и т. д.)

1 голос
/ 21 апреля 2014

Относительно исходного вопроса, который я хотел бы добавить к принятому ответу Мохамеда Мансура, существует также способ сделать эту работу наоборот:

Вы можете получить доступ к другим страницам расширениято есть страница параметров, всплывающая страница) из в фоновой странице / сценарий с вызовом chrome.extension.getViews().Как описано здесь .

 // 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...