2011-02-10 18 views
11

我有以下几点:为什么Firefox 3的断裂与执行console.log

console.log (a.time_ago() + ' ' + b.time_ago()); 

这是打破在Firefox 3中,当FF打在JS该行的意思,它去没有进一步。奇怪的是,如果我打开Firebug,它不会中断并继续正常。一些萤火虫如何防止这个问题?

我对此感到困惑。任何想到为什么console.log会打破Firefox 3,但不是如果萤火虫打开?

谢谢

+0

是不是萤火虫的一部分的console.log?因此,如果它没有打开,没有容器粘贴到... –

回答

30

这不只是Firefox。您的代码将停止在每个浏览器(除了Chrome和Safari浏览器(在某些情况下),因为他们有与他们的开发工具一起内置console.log()除外)。

这是因为当你没有萤火虫打开,没有定义对象“控制台”。你应该小心,千万不要在你的代码中留下console.log()函数,否则它将在每个浏览器中破坏


我想补充一点,我有时用这个功能:

function log() { 
    if (typeof console == 'undefined') { 
     return; 
    } 
    console.log.apply(console, arguments); 
} 

然后,您只需拨打:

log(somevar, anothervar); 

,它的工作方式是相同的控制台.log,但是如果没有加载萤火虫,并且不会失败(并且类型:P更短)

干杯

+0

哇我不知道! – AnApprentice

+1

你可以使用'console.log()',在调用任何控制台函数之前检查'window.console'是否存在。例如。 'if(window.console)console.log('Hello World');' – Michal

+1

safari也有console.log – generalhenry

1

我总是做一个if (console)检查以确保控制台确实存在。如果萤火虫未打开,就好像你正在处理一个空对象,这就是为什么它打破了。

+0

[空对象](http://en.wikipedia.org/wiki/Null_object)会默默吞下日志记录,这将工作正常... – delnan

+1

@delnan:我认为浮子的意思是'console'具有'null'的值(这不是真的,它是'undefined')。但是在这两种情况下,代码都会中断。 –

+0

啊是的。 Ment undefined! :D – bobber205

1

Firefox没有控制台对象。 Firebug添加一个。

简单的解决方法是让firebug为开发打开并移除console.log语句以进行部署。

,您还可以像

function log (msg) 
{ 
    if(console) 
    { 
    console.log(msg); 
    } 
} 

自定义日志功能,如果控制台存在

+0

这个函数的问题在于它不会接受多个参数和参数,就像console.log()一样,而且如果(控制台)不是很好的检查一个对象是否被定义或者不在javascript中。 – arnorhs

+0

代码片段不是为了实现功能,而是为了实现这个想法。我会发布一个真实的例子,但你也打败了我:p – generalhenry

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'); 
} 
4

在情况下,萤火虫被关闭,我覆盖控制台对象。所以,你可以实现后备功能...

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

0

为了让火狐3.0从抱怨可靠使用下面...

if ('console' in window) {} 
相关问题