2011-02-09 58 views
41

我在想,如何找到与javascript如果控制台对象可用?找出是否有控制台可用

我有问题,如果我忘记删除调试输出像console.log('sthg')我在几个浏览器中得到错误,如果没有萤火虫或类似的活动。

感谢您的帮助

旁边问题我感兴趣的有关控制台对象的所有信息。有任何人的一些文件链接,或者如此?这是一个标准吗?等等...

回答

60

检查属性存在为window成员:

if (window.console) { 
} 

旁边问题我感兴趣的有关控制台对象的所有信息。有任何人的一些文件链接,或者如此?这是一个标准吗?等等......

查看Firebug documentation for the Console API; Chrome和Safari实施了大多数(但不是全部)列在那里的方法。有没有标准定义控制台应该是什么,所以你需要测试每个浏览器,看看它是否支持该功能。

+0

什么是chromes和IEs控制台? :-) – helle 2011-02-09 15:15:47

+0

@helle:正如我所说的,Chrome实现了大部分的Firebug Console API方法。 IE实现了一些基本的,比如`warn`,`error`,`info`等,但是它并没有实现它们,并且似乎没有文档列表,所以你必须尝试一下你自己。 – 2011-02-09 15:23:35

+0

@AndyE你能解释为什么检查该属性存在于窗口不如使用typeof强壮吗?为什么我们不应该直接检查windows.console变量,或者甚至只是在其他答案中调用全局控制台? – matpop 2015-08-13 14:08:09

-4

也许......

if (console) { 
    // do stuff 
} 
+6

这会在未定义`console`的浏览器中引发错误。 – 2011-02-09 14:40:50

+0

是的......已经试过这个:-) – helle 2011-02-09 15:14:40

5

通过firebug定义,IE8(需要与F12打开开发人员工具),铬等,但有没有为它定义的规范。有一个console.log wrapper,使它非常容易使用,跨浏览器日志解决方案,所以如果控制台不存在,您的代码不会爆炸。

30

输出到控制台的一个不错的简单和短期的方式安全地如下:

window.console && console.log('Debug message'); 
2

我总是包括这在我的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); 
4
try{ 
console.log("test") 
} 
catch(e){ 
console={}, 
console.log=function(a){} 
} 

只是把它放在你的JS文件的顶部,然后使用的console.log();没有任何担心浏览器错误,我也有这个错误在IE9

7

这里是我使用的。请记住,我只是半心半意地支持不支持控制台的浏览器。我只用不完的console.log(),但你可以看到它是如何进行扩展以支持console.dir(),console.info()等

var console = console || { 
    "log": function(stuff) {} 
}; 

我喜欢它,因为调用它不导致错误,但它返回[undefined],我认为这是适当的。

注意,前(后)很多很多的人我们已经写了类似的polyfills:

https://gist.github.com/search?q=console+%7C%7C+console

2

简单的方法是:

if (window.console){ 
    console.log('do something'); 
} 

,而不是仅仅写:

console.log('do something'); 
相关问题