我有以下内容:
console.log (a.time_ago() + ' ' + b.time_ago());
这在FireFox 3中有所突破,这意味着当FF在JS中击中该行时,它就不会再进一步了。奇怪的是,如果我打开Firebug它不会破坏并继续正常。一些萤火虫如何防止这个问题?
我对这个感到困惑。有关为什么console.log会破坏firefox 3的任何想法,但是如果firebug是打开的话不会这样吗?
由于
答案 0 :(得分:30)
这不仅仅是Firefox。您的代码将停止在每个浏览器中工作(除了Chrome和Safari之外(在某些情况下),因为它们内置了console.log()及其开发人员工具。)
这是因为当你没有打开firebug时,没有定义对象“console”。您应该注意不要在代码中保留console.log()函数,否则它将在每个浏览器中断。
我想补充说我有时会使用这个功能:
function log () {
if (typeof console == 'undefined') {
return;
}
console.log.apply(console, arguments);
}
然后你可以简单地打电话:
log(somevar, anothervar);
并且它将以与console.log相同的方式工作,但如果未加载firebug则不会失败(并且键入的时间更短:P)
干杯
答案 1 :(得分:4)
如果该firebug已关闭,我将覆盖控制台对象。因此,您可以实现回退功能......
console = console || { log : function() {
// place your logging code here, if firebug is closed
}, debug : function() {
// place your debug code here, if firebug is closed
} /*, [ and so on .. ] */ };
问候,
Dyvor
答案 2 :(得分:2)
在FireFox中,如果在调用控制台时未打开控制台,则会引发JavaScript错误。
我将所有的console.log包装在一个包装器中以检查控制台 - 您可以在控制台调用周围进行检查,也可以使用其他名称来控制别名。
<强>混叠强>
/* konsole is a safe wrapper for the Firebug console. */
var konsole = {
log: function(args){},
dir: function(args){},
debug: function(args){},
info: function(args){},
warn: function(args){},
error: function(args){}
};
// Remove below here when in production
if (typeof window.console != 'undefined' && typeof window.console.log == 'function') {
konsole = window.console;
}
konsole.log('testing debugging');
konsole.error('throw an error message to the console');
检查控制台
if (typeof window.console != 'undefined' && typeof window.console.log == 'function') {
console.log('testing debugging');
console.error('throw an error message to the console');
}
答案 3 :(得分:1)
我总是进行if (console)
检查以确保控制台确实存在。如果萤火虫没有打开,就像你对一个零物体起作用,这就是为什么它会破裂。
答案 4 :(得分:1)
Firefox没有控制台对象。 Firebug增加了一个。
简单的解决方法是让firebug打开以进行开发,并删除用于部署的console.log语句。
您还可以创建自定义日志功能,如
function log (msg)
{
if(console)
{
console.log(msg);
}
}
仅在控制台存在时才会记录
答案 5 :(得分:0)
为了防止Firefox 3.0抱怨可靠使用以下内容......
if ('console' in window) {}