2013-04-13 3 views
3

В документации Mozilla (https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/console.html) говорится, что я должен использовать console.log для генерации сообщений с расширения. Сообщается, что эти сообщения отображаются в консоли ошибок Firefox. Но это не относится ко мне. Я использую Addon builder в первый раз сегодня, и я хотел бы создать расширение, которое переключает вкладки на определенные события. Вкладки действительно переключаются и на вкладку, которую я ожидал, поэтому мой код определенно работает. Но выход console.log негде увидеть.Запись в консоль из дополнения Firefox

Я установил фильтр на «Все». Все, что я вижу, - это предупреждения CSS из самого создателя аддона.

Я также установил Firebug. Он ничего не показывает. (Это отлично работает при использовании console.log из контекста веб-страницы.) Проблема с Firebug заключается в том, что она включена только для одной/любой вкладки, поэтому при переключении вкладок это бесполезно. Мне нужно окно журнала, которое всегда есть.

Итак, где будет выводиться вывод из console.log?

+0

Вы используете пульт от Firefox- > Для веб-разработчиков-> Консоль ошибок (Ctrl + Shift + J)? –

+0

Да, именно это с той же горячей клавишей. Это прямо из Firefox, который всегда был там. – ygoe

ответ

8

Идите дальше и положите тест console.log("something") в свой аддон main();

Если ничего не отображается в консоли ошибок (вкладка «Сообщения»), то, возможно, Firefox не настроен для отображения console.log (произошло недавно с jetpack sdk 1.14). См.: Changes to console.log behaviour in SDK 1.14 для деталей.

Быстрое и грязное Резюме: В about:configextensions.sdk.console.logLevel установлены в "all"

Хотя из вашего вопроса:

Я установил фильтр "Все".

... это звучало так, как будто вы уже знали об этом. Поэтому не совсем понятно, что вы имели в виду.

+1

Я установил фильтр только с кнопками, доступными в окне журнала ошибок, а не с скрытой настройкой. Но из статьи, на которую вы ссылались, новым значением по умолчанию будет «ошибка», которая только выводит вызовы на console.error(). Я изменил свои призывы к этому, и они теперь отображаются в окне журнала (в качестве сообщений об ошибках). Но у этого есть то преимущество, что я могу отфильтровать все предупреждения из самого конструктора надстроек, поэтому использование уровня ошибок для моих отладочных сообщений весьма полезно на самом деле. – ygoe

+0

По-видимому, связанное примечание, обновление до добавления SDK 1.14, похоже, «сломан» (или прекращено) 'alert()' – Lori

+0

Я даже не осмелился попробовать «alert» из контекста chrome. ;-) – ygoe

2

Просто для полноты: в, не вытаскивающей себя за волосы-SDK на основе аддона, я должен был добавить эти две строки в bootstrap.js иметь подделать console.log():

var aConsoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService); 
var console = {log:function(str){aConsoleService.logStringMessage(str);}} 

может прийти в удобен для кого-то другого, я думаю ..

+0

Цитировать по [здесь] (http://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/) - «В браузерах Webkit консоль встроена и свойство консоли всегда доступно. Консоль Firefox зависит от установленного и включенного Firebug (или других надстроек). В IE7 нет консоли, у IE8 есть консоль, но свойство консоли существует только при запуске IE Developer Tools ». – user3526

2

Я предполагаю, что они что-то изменили, теперь console.log не отображается. Я использую console.error для отладки, он все еще отображается в ctrl-shift-j.

На этой странице написано что-то об отказе от консоли ошибок и вместо этого используется веб-консоль. Вероятно, это связано. https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIConsoleService

Для этого не требуется sdk.

+0

Посмотреть новое решение, которое я разместил, работает отлично. – Noitidart

4

Вместо того чтобы делать var aConsoleService = Cc... просто придерживаться в дальнейшем, и вы можете использовать все:

Cu.import('resource://gre/modules/devtools/Console.jsm'); 

теперь может делать все, console.log('blah'), console.time('rawr'), console.endTime('rawr'), и т.д. и т.п. и т.д.

+1

Действительно ли «Cu.import» работает? В примерах у меня есть 'Components.utils.import' – dbreaux

+2

@dbreaux Обычно разработчики делают этот ярлык:' Cu' определяется как 'Components.utils', перейдя:' const {interfaces: Ci, utils: Cu, classes: Cc} = Компоненты; 'и в addon-sdk они идут:' var {Cu, Ci, Cc} = require ('chrome'); ' – Noitidart

Смежные вопросы