【发布时间】:2011-02-09 14:37:25
【问题描述】:
我想知道,我如何使用 javascript 找出控制台对象是否可用?
我有一个问题,如果我忘记删除像 console.log('sthg') 这样的调试输出,我会在几个浏览器中出错,如果没有萤火虫或类似的活动。
感谢帮助
在该问题旁边,我对有关控制台对象的所有信息感兴趣。有人有一些文档链接吗?这是一个标准吗?等等……
【问题讨论】:
标签: javascript debugging
我想知道,我如何使用 javascript 找出控制台对象是否可用?
我有一个问题,如果我忘记删除像 console.log('sthg') 这样的调试输出,我会在几个浏览器中出错,如果没有萤火虫或类似的活动。
感谢帮助
在该问题旁边,我对有关控制台对象的所有信息感兴趣。有人有一些文档链接吗?这是一个标准吗?等等……
【问题讨论】:
标签: javascript debugging
检查属性是否作为window的成员存在:
if (window.console) {
}
在该问题旁边,我对有关控制台对象的所有信息感兴趣。有人有一些文档链接吗?这是一个标准吗?等等……
查看Firebug documentation for the Console API; Chrome 和 Safari 实现了其中列出的大部分方法,但不是全部。没有标准定义控制台中应该包含什么,因此您需要测试每个浏览器以查看它是否支持该功能。
【讨论】:
warn、error、info 等,但它并没有全部实现,而且似乎没有文档列表,所以你必须尝试它们自己。
console 的全局变量覆盖该变量。现在这种情况不太可能发生,所以我编辑了我的帖子以简化答案。
安全输出到控制台的简单而简短的方法如下:
window.console && console.log('Debug message');
【讨论】:
这是我使用的。请记住,我只是半心半意地支持不支持控制台的浏览器。我只使用过console.log(),但你可以看到它是如何扩展来支持console.dir()、console.info()等的
var console = console || {
"log": function(stuff) {}
};
我喜欢它,因为调用它不会导致错误,但它返回 [undefined],我认为这是合适的。
请注意,在我们之前(和之后)有很多人编写过类似的 polyfill:
【讨论】:
由firebug、IE8(需要用F12打开开发者工具)、Chrome等定义,但没有定义它的规范。 console.log wrapper 使它成为一个非常易于使用的跨浏览器日志记录解决方案,因此如果控制台不存在,您的代码不会爆炸。
【讨论】:
try{
console.log("test")
}
catch(e){
console={},
console.log=function(a){}
}
只要把它放在你的 JS 文件的顶部,然后使用 console.log();不用担心浏览器错误,我在 IE9 中也有这个错误
【讨论】:
在加载其他内容之前,我总是将其包含在 HTML 标题的顶部。用 console.debug 调试对我来说太长了。而且我喜欢切换这些控制台功能的使用。
不知道代码优化到什么程度,但它总能胜任。
(function() {
var consoleDisabled = false;
if (consoleDisabled) {
window.console = undefined;
}
if (window.console == undefined) {
window.console = {
debug: function() {
return true;
},
info: function() {
return false;
},
warn: function() {
return false;
},
log: function() {
return false;
}
}
}
debug = (function(args) {
window.console.debug(args);
});
info = (function(args) {
window.console.info(args);
});
warn = (function(args) {
window.console.warn(args);
});
log = (function(args) {
window.console.log(args);
});
})();
debug(somevar);
info(somevar);
warn(somevar);
log(somevar);
【讨论】:
最简单的方法是:
if (window.console){
console.log('do something');
}
而不仅仅是写:
console.log('do something');
【讨论】:
也许……
if (console) {
// do stuff
}
【讨论】:
console 的浏览器中引发错误。