Почему console.log в надстройке Firefox не может вывести сообщение?

Этот вопрос отличается от console.log в firefox не работает? , так как этот вопрос касается панели отладки расширений, а не просто консоли веб-страницы.

Теперь я в панели отладки расширения: console.info() не может вывести hi сообщение, что не так?

Скриншот выглядит следующим образом: console.info ничего не показывает

Также кажется, что функция оповещения не работает в расширении Firefox, что не так? Некоторые функции отключены расширением Firefox?


person hugemeow    schedule 17.04.2015    source источник


Ответы (1)


На скриншоте видно, что у вас отключено "Ведение журнала". Вам нужно нажать на «Ведение журнала» и включить как минимум Ведение журнала->Журнал. Без этого вы специально указываете консоли не показывать hi, который вы пытаетесь распечатать.

Без ведения журнала: без ведения журнала

С включенным ведением журнала: с ведением журнала

Однако при тестировании на двойную проверку я смог перевести его в режим, в котором hi не печатался в консоли, даже когда «Ведение журнала» было включено. Когда я закрыл этот экземпляр отладчика и открыл новый экземпляр, в консоли уже было напечатано hi. С другой стороны, похоже, что любой новый экземпляр сохранит такие выходные данные из предыдущих экземпляров. Учитывая, что мне удалось перевести его в режим, в котором hi не печатался при включении ведения журнала, с этой новой функциональностью все еще есть некоторые проблемы. Я не смог повторить это во второй раз.

Что касается предупреждений: нет, ничего не отключено. Вы, вероятно, сталкиваетесь с распространенной проблемой, когда переменная window не определена в контексте/области, в которой вы работаете. Расширения браузера Firefox часто/обычно запускаются в контексте, где window не определено. Это становится проблемой для многих людей, поскольку они предполагают, что window будет определено для них.

Окно не определено

Если window определено, это зависит от того, как была введена часть вашего кода, который в данный момент выполняется. Даже если window определено, оно часто не определяется как window, которое вы ожидаете (window текущей вкладки). Вам, вероятно, потребуется получить ссылку на объект window для самого последнего доступного окна/вкладки.

Если окно браузера существует (в некоторых случаях вы можете работать там, где окно браузера еще не существует, например, при запуске), вы можете получить ссылку на самый последний браузер window, document и gBrowser с помощью:

if (window === null || typeof window !== "object") {
    //If you do not already have a window reference, you need to obtain one:
    //  Add/remove a "/" to comment/un-comment the code appropriate for your add-on type.
    /* Add-on SDK:
    var window = require('sdk/window/utils').getMostRecentBrowserWindow();
    //*/
    //* Overlay and bootstrap (from almost any context/scope):
    var window=Components.classes["@mozilla.org/appshell/window-mediator;1"]
                         .getService(Components.interfaces.nsIWindowMediator)
                         .getMostRecentWindow("navigator:browser");        
    //*/
}
if (typeof document === "undefined") {
    //If there is no document defined, get it
    var document = window.content.document;
}
if (typeof gBrowser === "undefined") {
    //If there is no gBrowser defined, get it
    var gBrowser = window.gBrowser;
}

Если вы запускаете код в ответ на событие (например, событие кнопки command), вы можете получить текущий window с помощью:

var window = event.view

Определение window:
Определить окно

и покажите window.alert('Hello'):
Предупреждение

Примечание. Если вы хотите иметь нативную совместимость с многопроцессорным Firefox (электролиз, или e10s), то получить доступ к содержимому текущего документа будет сложнее. Существуют прокладки, которые должны заставить ваш код продолжать работать с многопроцессорным Firefox в течение некоторого времени, но они могут/в конечном счете исчезнут.

Использованная литература:

  1. nsIWindowMediator
  2. Работа с окнами в коде Chrome
  3. SDK: window/utils
  4. SDK: окна

Большая часть этого была скопирована из моих предыдущих ответов, включая эту ссылку и вот этот.

person Makyen♦    schedule 18.04.2015