【发布时间】:2010-05-24 00:05:49
【问题描述】:
Firebug 无疑是一个很棒的 javascript 调试工具;我广泛使用 console.log()。
我想知道是否可以将特定于 Firebug 的代码留在生产环境中。 最佳做法是什么?评论调试代码?
【问题讨论】:
标签: javascript jquery firebug
Firebug 无疑是一个很棒的 javascript 调试工具;我广泛使用 console.log()。
我想知道是否可以将特定于 Firebug 的代码留在生产环境中。 最佳做法是什么?评论调试代码?
【问题讨论】:
标签: javascript jquery firebug
如果您在生产代码中保留 console.log() 调用,那么使用 Internet Explorer 访问该站点的人将遇到 JavaScript 错误。如果这些人配置了额外的调试工具,那么他们会看到令人讨厌的对话框或弹出窗口。
快速搜索发现此线程讨论了检测 Firebug 控制台是否存在的方法:http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html
【讨论】:
以前被这个咬过。理想情况下,所有 console.log 语句都需要在生产之前删除,但这很容易出错,开发人员总是忘记或只在 FF + Firebug 中进行测试。
一个可能的解决方案是创建一个虚拟控制台对象(如果尚未定义)。
if( typeof window.console == 'undefined'){
window.console = {
log:function(){}
};
}
请注意:Safari 在 10.4 上的情况是,任何对 console.log 的调用都会引发安全异常,因为控制台对象是 Mac OS 仪表板小部件中使用的保留对象。不确定是否是这种情况,今晚会检查。
【讨论】:
前段时间我个人修改了我的压缩器以去除控制台引用预压缩。在那里添加一个正则表达式只需几分钟就可以节省一生的麻烦。
【讨论】:
var a = console;a.log("test"); 仍然会抛出错误。当然,这样的参考不太可能,但由于存在更好的解决方案(见上文),这样做似乎是不明智的。
只是想我会为任何 js 调试添加一个非常好的技巧......使用关键字“调试器”,它就像代码中的断点,firebug 也检测到它 MSIE(如果你有 Visual Studio)检测到它正如我所说,它是一个断点。
似乎没有多少人知道这一点,但我发现它非常宝贵……如果运行代码的机器上没有安装调试器,则不会发生任何事情并且代码运行良好。虽然我不建议把它们留在里面。
【讨论】:
我为此头疼过很多次。
我经常使用console.log(),直到最近才发现它会导致整个JS代码在不使用firebug的FF版本中失败。
我通常在上线前运行查找,然后将其注释掉。
D
【讨论】:
一些压缩器会去掉任何前缀为 ;;; 的行。 (这是一个合法的序列,是三个空语句。)这样你就不会严格限于控制台引用(即你可以做一些计算,然后 console.log() 最后的结果,压缩器可以把它们都去掉。)我为此使用JavaScript::Minifier。
【讨论】:
我在 OOP Javascript 中使用它,为检查 firebug 是否存在的日志制作自己的包装器:
myclass.prototype.log = function()
{
if( typeof window.console != 'undefined' )
{
console.log.apply( null, arguments );
}
}
只需调用:
this.log( arg1, arg2, ...)
【讨论】:
提醒一下,IE 开发工具不支持 console.log 上的 apply()。
当开发工具处于活动状态时,调用 console.log.apply() 将在 IE8 中引发异常。
【讨论】:
你可以试试JavaScript Debug,它是console.log的简单包装器 http://benalman.com/projects/javascript-debug-console-log/
【讨论】: