От новичка до гуру: Курсы программирования на CyberDuff

Войти в консоль ошибок Firefox из JavaScript

Можно ли добавлять сообщения во встроенную консоль ошибок Firefox из кода JavaScript, работающего на веб-страницах?

Я знаю, что есть Firebug, который предоставляет объект console и собственную консоль ошибок, но раньше я искал быстрое решение и ничего не нашел.

Я предполагаю, что это может быть вообще невозможно, чтобы вредоносные веб-страницы не спамили журнал?


Ответы:


1

Вы не можете писать в консоль напрямую из ненадежного JavaScript (например, из скриптов, поступающих со страницы). Однако, даже если вам не нравится установка Firebug, я рекомендую проверить Firebug Lite, для которого требуется не требует установки в браузер (и даже не требует Firefox). Это скрипт, который вы можете включить в любую веб-страницу (даже динамически), что даст вам некоторые базовые функции Firebug (например, console.log()).

23.04.2009
  • А в браузере SeaMonkey (который также основан на Gecko) вы можете включить ведение журнала в консоль JavaScript с помощью browser.dom.window.console.enabled скрытых настроек (начиная с версии 2.11, см. ошибка 739965). Это не влияет на FireBug, так как все результаты console.log(...) немедленно появляются в его консоли независимо от преф. 11.02.2016

  • 2

    Если вы определяете глобальную функцию, проверяющую существование window.console, вы можете использовать Firebug для трассировки и по-прежнему хорошо работать с другими браузерами и/или если вы отключите трассировку консоли Firebug:

    debug = function (log_txt) {
        if (typeof window.console != 'undefined') {
            console.log(log_txt);
        }
    }
    
    debug("foo!");
    
    09.03.2010
  • +1 это полезно, если вы случайно оставили console.log в своем производственном коде. 16.09.2011
  • Нет необходимости оборачивать функцию console.log. Обернув его, вы потеряете функциональность форматирования. Просто назначьте его функции отладки: var debug = function () {} ; if (window.console != undefined) { debug = console.log; }. Теперь вы также можете сделать это: debug ("%s", "a") 05.12.2011
  • @ceving: знаете ли вы, почему с вашим решением в chrome я получаю: TypeError: Illegal invocation? 29.05.2012
  • @wiso: для Chrome может потребоваться оболочка. См. здесь: stackoverflow.com/ вопросы/8159233/ 29.05.2012

  • 3

    Да можно =Р

    function log(param){
        setTimeout(function(){
            throw new Error("Debug: " + param)
        },0)
    }
    
    //Simple Test:
    alert(1)
    log('This is my message to the error log -_-')
    alert(2)
    log('I can do this forever, does not break')
    alert(3)
    

    Обновить до реальной функции

    Это простой хак, просто для удовольствия.

    13.01.2010
  • @nornagon Да, я понимаю, было бы лучше с функцией, но я сделал это, чтобы быть совместимым с IE, плохой setTimeout() 30.04.2011
  • +1 за сообразительность. Однако я думаю, что я пойду по пути поджигателя. :) 02.05.2011

  • 4

    window.console не определен в Firefox 4 beta 6, даже если Firebug 1.6X.0b1 включен и открыт, вероятно, из-за проблем с привилегиями, которые обсуждают другие. Однако в Firefox 4 есть новый Инструменты > Веб-консоль, и если он открыт, у вас есть объект window.console, и ненадежный код JavaScript на странице может использовать console.log(). Веб-консоль постоянно меняется (см. https://wiki.mozilla.org/Firefox/Projects/Console), вам может потребоваться изменить настройки с именем devtools.* в about:config , YMMV.

    19.09.2010
  • Это абсолютно идеальное решение поставленного вопроса. 09.11.2011

  • 5

    Я бы просто установил Firebug и использовал console.log. Однако, если вы не можете этого сделать, вы всегда можете выдать ошибку:

    throw "foobar";
    throw new Error("bazquux");
    

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

    23.04.2009
  • Я не против установки Firebug (который у меня уже есть), я просто хотел знать наверняка. Выдавать ошибку явно было нельзя, потому что я отслеживал свой код. 24.04.2009
  • Если вам нужно неблокирующее сообщение об ошибке (например, мониторинг переменной в цикле), используйте setTimeout(throw new Error('Wheeeeeee!'),0); 15.12.2009
  • bazquux - это ТОЧНО тип ошибки, о которой я хотел уведомить себя 18.01.2010

  • 6

    АФАИК, это невозможно. Но если вас интересует, как расширения в Firefox взаимодействуют с консолью ошибок, проверьте это< /а>.

    23.04.2009
  • +1 за Components.utils.reportError - я все время забываю, как это вызывается, и трачу время, чтобы найти его снова, снова и снова! 07.09.2011

  • 7

    Эта функция не требует ни расширения, ни библиотеки. Однако он предоставляет полные привилегии соответствующему веб-сайту. Не беспокойтесь, так как вы его разрабатываете, верно?

    
    // Define mylog() function to log to Firefox' error console if such a
    // thing exists
    function defineMyLog()
    {
        // Provide a useless but harmless fallback
        mylog = function(msg) { };
        // return; // disable in production
    
        if (typeof(netscape) === "undefined") {
            // alert("Logging implemented only for Firefox");
            return;
        }
        // The initial auth popup can be avoided by pre-setting some magic user_pref
        //  ( "capability.principal.codebase.p0.granted", "UniversalXPConnect"), etc.
        try {
            netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
        } catch (e) { // User has denied privileges
            // alert(e.name + ": " + e.message);
            return;
        }
        ffconsoleService = Components.classes["@mozilla.org/consoleservice;1"]
                                     .getService(Components.interfaces.nsIConsoleService);
        mylog = function (msg)
        {
            netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
            ffconsoleService.logStringMessage(new Date().toLocaleTimeString() + ": " + msg);
        }
        mylog("Firefox logging function has been defined");
    
        // window.open("javascript:"); // this URL does not work anymore?
    }
    
    15.04.2010
  • Это вызывает ошибку разрешений в Firefox 4: «Отказано в доступе для получения свойства XPCComponents.classes». 01.07.2011
  • Спасибо за отзыв jmort253. Вы пытались предоставить возможность в user_pref, как показано в комментарии к коду? 04.08.2011
  • Это было давно, так что я точно не помню... Я думаю, вы можете увидеть это в Firebug. Вероятно, вы правы в том, что нужно установить user_pref, но это будет означать, что журнал может быть полезен только разработчику. Трудно заставить пользователей изменить такие вещи. 06.08.2011
  • Даже в Firefox 3 эта функция требовала предоставления полных привилегий веб-сайту, что определенно делает ее полезной только для разработчиков, в этом нет никаких сомнений. Я предполагаю, что они просто усилили безопасность в Firefox 4, что имеет смысл, учитывая, сколько пользователей нажимают OK, не читая. 08.08.2011
  • Хорошо, я вижу в этом ценность как разработчик на локальной машине. Сначала я думал, что система ведения журнала будет работать в системе обычных пользователей, а не только разработчиков. Я видел некоторые довольно сумасшедшие вещи, происходящие в браузерах пользователей, и было бы здорово, если бы они могли прислать мне журнал. У меня была ошибка в чем-то на компьютере коллеги, которую я не мог воспроизвести, пока мы не определили, что это было из-за того, что у него были установлены расширения NoScript и Adblock Firefox, которые препятствовали запуску моего JS! 10.08.2011

  • 8

    Если вам интересно, посмотрите сценарий, который я написал — это «дешевая» замена Firebug, которая не мешает работе любой обычной консоли (например, Safari или Chrome), но расширяет ее почти всеми методами Firebug:

    http://code.google.com/p/glentilities/

    Загляните под капот, и вы увидите, что я имею в виду под словом «дешево». :-)

    Объедините его с сериализаторами JSON YUI или json.org для своего рода репликации console.dir.

    Firebug и Firebug Lite, безусловно, более приятные графические интерфейсы, но я все время использую свой доморощенный, чтобы безопасно вести журнал даже для производственного кода — без постоянных комментариев и раскомментирования,

    23.04.2009

    9

    Сегодня у меня возникла проблема, и я заметил, что консоль в Firebug имеет разные вкладки, а моя была в информации об удалении, и вы должны выбрать опцию ВСЕ, чтобы увидеть, как console.log работает без ошибок! Просто так! ;^)

    09.08.2014
    Новые материалы

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..