IE8中的控制台未定义问题

时间:2013-06-14 08:52:37

标签: javascript internet-explorer-8

据我所知,如果调试窗口打开,IE只会将 console 视为对象。如果调试窗口未打开,则将控制台视为未定义。

这就是我决定添加 if 检查的原因:

        if(console)
            console.log('removing child');

我的理解是,如果 console 未定义,它将跳过 console.log 。但是在IE8中, if(控制台)行通过,我在 console.log 之前得到了一个未定义的异常。这很奇怪。

有解决方法吗? 以及如何在代码中编写控制台以便它在所有三个浏览器上运行?

6 个答案:

答案 0 :(得分:8)

您可以将以下内容添加到if子句中:

if (console && console.log) {
    console.log('removing child');
}

或者像这样在console.log函数周围写一个日志包装器。

window.log = function () {
    if (this.console && this.console.log) {
        this.console.log(Array.prototype.slice.call(arguments));
    }
}

像这样使用:

log("This method is bulletproof", window, arguments");

这是一个jsfiddle: http://jsfiddle.net/joquery/4Ugvg/

答案 1 :(得分:4)

您可以将console.log设置为空函数

if(typeof console === "undefined") {
    console = {
        log : function () {}
    }
}

这样你只需要打扰一次.l

答案 2 :(得分:1)

只检查控制台是否存在

window.console && console.log('foo');

答案 3 :(得分:0)

尝试使用这样的条件,就像不支持控制台一样,它会抛出undefined而不是false;

if(typeof console !== "undefined") {
console.log('removing child');
}

但是,为了防止必须包装所有控制台日志状态,我只需将此代码段放入您的代码中。这将阻止IE抛出任何错误

if(typeof console === "undefined") {
    console = {
        log: function() { },
        debug: function() { },
        ...
    };
}

答案 4 :(得分:0)

您需要检查控制台的类型,以及console.log的类型。您可能需要查看此链接:

What happened to console.log in IE8?

答案 5 :(得分:0)

查看有关相同内容的更多信息:http://patik.com/blog/complete-cross-browser-console-log/