据我所知,如果调试窗口打开,IE只会将 console 视为对象。如果调试窗口未打开,则将控制台视为未定义。
这就是我决定添加 if 检查的原因:
if(console)
console.log('removing child');
我的理解是,如果 console 未定义,它将跳过 console.log 。但是在IE8中, if(控制台)行通过,我在 console.log 之前得到了一个未定义的异常。这很奇怪。
有解决方法吗? 以及如何在代码中编写控制台以便它在所有三个浏览器上运行?
答案 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的类型。您可能需要查看此链接:
答案 5 :(得分:0)