2009-05-27 36 views

回答

14

如果你离开的console.log()调用你的产品代码,然后人访问使用Internet Explorer的网站将有JavaScript错误。如果这些人有额外的调试工具配置,那么他们会看到讨厌的对话框或弹出窗口。

快速搜索发现此线程讨论方法,如果Firebug控制台存在检测:http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

2

我已经有很多由此造成的头痛。

我使用的console.log()很多,直到最近,发现它会导致整个JS代码在FF的版本失败不使用萤火虫。

通常我才去住,并注释掉它运行的发现。

d

14

被这个前咬伤。理想情况下,所有console.log语句都需要在生产之前删除,但这很容易出错,开发人员总是忘记或仅在FF + Firebug中进行测试。

一种可能的方案是,如果一个尚未定义创建一个虚拟控制台对象。谨慎的

if(typeof window.console == 'undefined'){ 
    window.console = { 
     log:function(){} 
    }; 
} 

一个字:它曾经是10.4,任何调用CONSOLE.LOG会抛出一个安全异常的控制台对象是在Mac OS Dashboard构件使用的预留对象Safari的情况。不知道这是什么情况,今晚会检查。

+0

最新版本10.5的Safari实际使用在他们的网站开发工具的console.log()API简单的包装,所以这可能如果您支持最新版本,则不会成为问题。 – ajm 2009-05-27 14:26:43

+0

不够公平,认为它们不会让它损坏太长 – 2009-05-27 15:05:52

8

个人而言,我修改了我的压缩机前一阵子来剔除控制台参考预压缩。几分钟后添加一个正则表达式可以节省一生的麻烦。

3

想到我会为任何js调试添加一个非常好的提示....使用关键字“调试器”,它就像代码中的断点,萤火虫检测到它也MSIE(如果你有Visual Studio)检测它和我说它是一个断点。

并非许多人似乎知道这一点,但我发现它invaluble ...如果还有心不是有安装在运行该代码的机器上的一个调试器,没有任何反应和代码经过精细。虽然我不建议让他们留在那里。

2

某些压缩机会去掉以; ;;为前缀的任何行。 (这是一个合法的序列,有三个空的语句)。这样你就不会严格限制于控制台引用(也就是说,你可以做一些计算,然后在最后使用console.log()结果,压缩器可以将其全部取出。)我使用JavaScript::Minifier

1

我在OOP的Javascript使用,使我自己的包装日志,检查是萤火虫存在:

myclass.prototype.log = function() 
{ 
    if(typeof window.console != 'undefined') 
    { 
     console.log.apply(null, arguments); 
    } 
} 

只要致电:

this.log(arg1, arg2, ...) 
0

只是一个提醒,IE浏览器开发工具不支持在console.log上应用()。

当dev工具处于活动状态时,调用console.log.apply()将引发IE8中的异常。