2

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

这就是为什么我决定添加这样的if检查:

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

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

有没有解决的办法?以及如何在代码中编写控制台代码,使其在所有三个浏览器上运行?

4

6 回答 6

9

您可以在 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/

于 2013-06-14T08:54:59.690 回答
4

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

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

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

于 2013-06-14T08:56:45.743 回答
1

只需检查控制台是否存在

window.console && console.log('foo');
于 2013-06-14T09:00:24.743 回答
0

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

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

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

if(typeof console === "undefined") {
    console = {
        log: function() { },
        debug: function() { },
        ...
    };
}
于 2013-06-14T08:54:33.253 回答
0

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

IE8 中的 console.log 发生了什么?

于 2013-06-14T08:54:52.477 回答
0

查看更多信息: http: //patik.com/blog/complete-cross-browser-console-log/

于 2013-06-14T09:05:26.460 回答