Как просмотреть вывод console.log фонового скрипта в Firefox WebExtension?

Кто-нибудь знает, как увидеть результат вызова console.log() в фоновом сценарии? Я вижу результат того же в сценарии содержимого. Вот простой скрипт, который я тестирую:

Вот мой background.js:

console.log("Message from background.js");

Вот мой manifest.json:

{
    "name": "TestBed",
    "manifest_version": 2,
    "version": "1.0",

    "background": {
        "scripts": ["background.js"]
    },

    "browser_action": {
        "default_title": "Click"
    },

    "applications": {
        "gecko": {
            "id": "[email protected]",
            "strict_min_version": "48.0a1"
        }
    }
}

Я также пробовал это в фоновом сценарии:

chrome.browserAction.onClicked.addListener(function() {
    console.log('Message from background.js onclicked handler');
});

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




Ответы (1)


Более общий ответ о просмотре вывода расширения в консоли см. в моем ответе на вопрос: Google Chrome/Firefox не видят вывод расширения в консоли .

Отладчик дополнений

Это то, что вы должны использовать для просмотра вывода консоли из сценариев, работающих в фоновом контексте вашего WebExtension. Сюда входят фоновые сценарии, сценарии, работающие во всплывающих окнах, страницы параметров и любые другие страницы, загружаемые из расширения в качестве основного URL-адреса для вкладки или iframe. Вы можете получить доступ к отладчику дополнений через about:debugging➞Проверить (используйте кнопку «Проверить», связанную с отлаживаемым WebExtension; для каждого расширения есть отдельная кнопка). Это откроет новую вкладку с отладчиком. Затем вы можете щелкнуть вкладку «Консоль» на этой вкладке браузера. Эта консоль будет отображать только контент из проверяемого вами WebExtension.

Консоль браузера

Консоль браузера больше не отображает вывод фоновых страниц WebExtensions по умолчанию. Вы можете настроить отображение выходных данных из всех WebExtensions, выбрав отображение сообщений с содержимым, которые доступны во всплывающем окне, которое открывается при нажатии на значок шестеренки ⚙️ в правом верхнем углу окна, справа от Requests.

Вы можете увидеть вывод console.log() ваших фоновых скриптов в консоли браузера. . Вы можете открыть консоль браузера с помощью комбинации клавиш Ctrl-Shift-J или Cmd- Shift-J в OSX или в строке меню Firefox: Инструменты➞Веб-разработчик➞Консоль браузера.

При тестировании WebExtensions в версиях выше или равных 49,1 я регулярно злоупотребляю неправильной функцией, чтобы расширение открывало консоль браузера. Функция alert() не поддерживается в фоновых сценариях, но открывает консоль браузера и выводит текст предупреждения в консоль.2 Это будет работать в версиях Firefox выше или равной 49.0. Однако в более ранних версиях Firefox возникает ошибка.

Для тестирования я часто включаю в свои фоновые сценарии что-то вроде:

//* For testing, open the Browser Console
try {
    //alert() is not actually supported in Firefox WebExtension background scripts.
    //This forces the Browser Console open.
    //This abuse of a misfeature works in FF49.0b+, not in FF48.
    alert('Open the Browser Console.');
} catch(e) {
    //alert() throws an error in Firefox versions below 49.
    console.log('alert() threw an error. Probably Firefox version < 49.');
}
//*

  1. Некоторое время в Firefox 52.0a2 (Developer Edition) и 53.0a1 (Nightly) выдавало загадочную ошибку. В самых последних сборках этих версий это было возвращено к функциональности, наблюдаемой в Firefox 49: открытие консоли браузера и отображение переданного текста и сообщения в 2 (ниже).
  2. В дополнение к тексту, переданному в alert(), он также будет выводиться на отдельной строке: alert() не поддерживается в фоновых окнах; пожалуйста, используйте вместо него console.log.
person Makyen♦    schedule 22.08.2016
comment
Так как же вызвать оповещение при нажатии на кнопку (не всплывающее меню)? - person ilw; 23.04.2017
comment
@Andreua, из фонового скрипта? Вы не знаете. Вы можете открыть окно с собственным HTML, чтобы оно выглядело как предупреждение. Вы можете сделать его эффективно модальным (то есть пользователь должен взаимодействовать с ним, прежде чем делать что-либо еще), но у вас не может быть чего-то, что на самом деле блокирует выполнение JavaScript. - person Makyen♦; 23.04.2017
comment
Неважно: фоновый скрипт или нет, просто как вызвать обычное оповещение, нажав кнопку WebExtension? Неужели не невозможно? - person ilw; 24.04.2017
comment
Этот alert() трюк с самостоятельным открытием консоли браузера просто великолепен. Слишком часто я задаюсь вопросом, почему я ничего не вижу в консоли только для того, чтобы вспомнить, что это не та консоль! Я собираюсь использовать это много! - person Stack of Pancakes; 15.03.2018
comment
Я случайно открыл нужную консоль, потому что всегда проверяю там ошибки после перезагрузки изменений JavaScript. Но для console.log мне все еще нужно установить флажок Показать сообщения о содержимом (версия firefox 70). - person CarpeDiemKopi; 11.10.2019
comment
@CarpeDiemKopi Абсолютно бесценный совет, спасибо. - person Sabuncu; 11.01.2020