«консоль» - неопределенная ошибка для Internet Explorer - PullRequest
371 голосов
/ 24 июля 2010

Я использую Firebug и у меня есть несколько утверждений вроде:

console.log("...");

на моей странице.В IE8 (возможно, и в более ранних версиях) я получаю ошибки скрипта, в которых говорится, что «console» не определена.Я попытался поместить это наверху моей страницы:

<script type="text/javascript">
    if (!console) console = {log: function() {}};
</script>

все еще я получаю ошибки.Есть ли способ избавиться от ошибок?

Ответы [ 21 ]

2 голосов
/ 12 марта 2014

Заметил, что OP использует Firebug с IE, поэтому предположим, что Firebug Lite . Это забавная ситуация, поскольку консоль определяется в IE при открытии окна отладчика, но что происходит, когда Firebug уже запущен? Не уверен, но, возможно, метод firebugx.js может быть хорошим способом для тестирования в этой ситуации:

Источник:

https://code.google.com/p/fbug/source/browse/branches/firebug1.2/lite/firebugx.js?r=187

    if (!window.console || !console.firebug) {
        var names = [
            "log", "debug", "info", "warn", "error", "assert",
            "dir","dirxml","group","groupEnd","time","timeEnd",
            "count","trace","profile","profileEnd"
        ];
        window.console = {};
        for (var i = 0; i < names.length; ++i)
            window.console[names[i]] = function() {}
    }

(обновленные ссылки 12/2014)

1 голос
/ 09 апреля 2013

Для IE8 или поддержки консоли, ограниченной console.log (без отладки, трассировки, ...), вы можете сделать следующее:

  • Если console ИЛИ console.log не определено: Создать фиктивные функции для консольные функции (trace, debug, log, ...)

    window.console = { debug : function() {}, ...};

  • Иначе, если console.log определен (IE8) И console.debug (любой другой) не определен: перенаправить все функции ведения журнала в console.log, это позволяет сохранить эти журналы!

    window.console = { debug : window.console.log, ...};

Не уверен насчет поддержки assert в различных версиях IE, но любые предложения приветствуются. Также опубликовал этот ответ здесь: Как я могу использовать консольный журнал в Internet Explorer?

1 голос
/ 16 ноября 2011

Я использую fauxconsole ; Я немного изменил CSS, чтобы он выглядел лучше, но работал очень хорошо.

1 голос
/ 22 февраля 2013

Для отладки в IE, проверьте это log4javascript

1 голос
/ 16 октября 2013
console = console || { 
    debug: function(){}, 
    log: function(){}
    ...
}
0 голосов
/ 04 мая 2017

Заглушка консоли в TypeScript:

if (!window.console) {
console = {
    assert: () => { },
    clear: () => { },
    count: () => { },
    debug: () => { },
    dir: () => { },
    dirxml: () => { },
    error: () => { },
    group: () => { },
    groupCollapsed: () => { },
    groupEnd: () => { },
    info: () => { },
    log: () => { },
    msIsIndependentlyComposed: (e: Element) => false,
    profile: () => { },
    profileEnd: () => { },
    select: () => { },
    time: () => { },
    timeEnd: () => { },
    trace: () => { },
    warn: () => { },
    }
};
0 голосов
/ 07 мая 2014

Обнаружена похожая проблема при запуске console.log в дочерних окнах в IE9, созданных функцией window.open.

Кажется, что в этом случае консоль определяется только в родительском окне и не определяется в дочерних окнах, пока вы не обновите их. То же относится и к детям дочерних окон.

Я имею дело с этой проблемой, заключив журнал в следующую функцию (ниже фрагмент модуля)

getConsole: function()
    {
        if (typeof console !== 'undefined') return console;

        var searchDepthMax = 5,
            searchDepth = 0,
            context = window.opener;

        while (!!context && searchDepth < searchDepthMax)
        {
            if (typeof context.console !== 'undefined') return context.console;

            context = context.opener;
            searchDepth++;
        }

        return null;
    },
    log: function(message){
        var _console = this.getConsole();
        if (!!_console) _console.log(message);
    }
0 голосов
/ 27 июля 2010

Вы можете использовать console.log (...) напрямую в Firefox, но не в IE.В IE вы должны использовать window.console.

0 голосов
/ 29 января 2014

Иногда консоль будет работать в IE8 / 9, но в других случаях происходит сбой. Это нестабильное поведение зависит от того, открыты ли у вас инструменты разработчика, и описано в вопросе stackoverflow Поддерживает ли IE9 console.log и действительно ли это функция?

0 голосов
/ 05 февраля 2013

Вы можете использовать нижеприведенную форму, чтобы получить дополнительную степень страховки, покрывающую все базы.Сначала используйте typeof, чтобы избежать ошибок undefined.Использование === также гарантирует, что имя типа на самом деле является строкой "undefined".Наконец, вы захотите добавить параметр в сигнатуру функции (я выбрал logMsg произвольно), чтобы обеспечить согласованность, поскольку вы передаете все, что вы хотите, в консоль, функции журнала.Это также обеспечивает точность ваших сведений и позволяет избежать любых предупреждений / ошибок в вашей IDE-осведомленной среде JS.

if(!window.console || typeof console === "undefined") {
  var console = { log: function (logMsg) { } };
}
...