在IE中测试console.log语句

Mic*_* BW 46 javascript firebug internet-explorer

可能重复:
"控制台"是Internet Explorer的未定义错误

如果您console.log的代码中有语句,Internet Explorer将抛出JavaScript错误(至少在我们的Intranet用户安装的IE7中).

我在大多数开发测试中使用Firefox主要是因为Firebug提供的功能(我使用了大量的控制台语句)但我还需要在IE中进行测试.

如果我将以下内容添加到我的JavaScript中,则不会抛出错误.

var debugging = false;
if (typeof console == "undefined") 
    var console = { log: function() {} };  
Run Code Online (Sandbox Code Playgroud)

问题是如果调试模式为false,我想触发一个事件.如果我创建一个函数来测试调试是否为false并执行操作(此时只是一个警报)但是当我尝试执行以下操作时,我收到一个IE错误,说明控制台未定义.

var debugging = false; // or true   
if (typeof console == "undefined") 
    var console = { log: function() {consoleMsg()} };   

function consoleMsg() {
    if(!debugging) {
    alert('Console.log event in Production Code');
}   
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮我修改我的代码,提供一个更好的方法来帮助我实现我的目标,或者指导我一个资源来教育我自己,我会非常感激.

Jos*_*ber 137

你不必跳过所有这些箍.在使用之前,只需检查控制台是否存在.

所以,而不是:

console.log('foo');
Run Code Online (Sandbox Code Playgroud)

使用:

window.console && console.log('foo');
Run Code Online (Sandbox Code Playgroud)

......你不会有任何错误.


或者,您可以在脚本的顶部检查它,如果它未定义,只需用空函数填充它:

// At the top of your script:
if ( ! window.console ) console = { log: function(){} };
// If you use other console methods, add them to the object literal above

// Then, anywhere in your script:
console.log('This message will be logged, but will not cause an error in IE7');
Run Code Online (Sandbox Code Playgroud)

要获得更强大的解决方案,请使用这段代码(取自twitter的源代码):

// Avoid `console` errors in browsers that lack a console.
(function() {
    var method;
    var noop = function () {};
    var methods = [
        'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
        'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
        'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
        'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];

        // Only stub undefined methods.
        if (!console[method]) {
            console[method] = noop;
        }
    }
}());
Run Code Online (Sandbox Code Playgroud)

  • @pimvdb - 忘了添加`window`部分.谢谢.更新. (4认同)
  • 如果没有定义`console`,那仍然会给出一个`ReferenceError`. (3认同)
  • 从Twitter的源代码中获取的代码片段为+1.好点和分享(和来源的诚实). (3认同)

gra*_*ine 5

'console'本身需要是一个函数,以及'log'.所以:

if(typeof(console) === 'undefined') {
    console = function(){};
    console.log = function(){consoleMsg()};
}   
Run Code Online (Sandbox Code Playgroud)

  • 它是Firefox中的一个对象,包括firebug,Chrome,Safari和Opera. (2认同)