2010-01-14 33 views
6

我使用Firebug的console.log()来调试我的网站。如果我尝试在没有Firebug的浏览器中查看我的网站,那么我会得到一个控制台未定义错误。 有没有办法优雅地避免这个错误?未安装时忽略萤火虫控制台

我发现this potential solution,但看起来有点麻烦。 和想法?

回答

17

Firebug的源代码提供了一个文件,要做到这一点:

firebugx.js

不要每天都推倒重来:)

+0

这实际上是一个非常好的解决方案,特别是如果您使用'warn'和'error'等其他函数。 – 2010-01-18 10:26:57

+3

链接失败了。我认为这是相同的: http://code.google.com/p/fbug/source/browse/branches/firebug1.5/lite/firebugx.js – 2010-05-12 02:50:25

+0

感谢马修,我已经固定即使链接它不是该文件的最后一个版本(我在萤火虫的svn资源库中找不到任何地方) – OcuS 2010-12-23 16:14:39

2

我不认为它比您链接到的解决方法好得多。当然可以把它融化为只是定义console.log()并且不再休息,但实质上,你不会绕过这样的构造。

只有想到的另一种方法是在每次调用console.log时检查它,而这更加麻烦。

3

链接的解决方案基本上是这方面的一个变型(有一些额外的功能):

编辑下面的代码当Firefox存在不实际工作。这会教张贴代码不检查只是为了炫耀我没有那么1337运营商||的skillz:

window.console = window.console || {}; 
console.log = function(){}; 

其原因是,Firefox的控制台实际上是一个getter只是property关闭窗口。因此我们无法设置它。相反,需要像这样使用:

if (!window.console) { 
    window.console = {}; 
    window.console.log = function(){}; 
} 

此外,console.log(和console.warnconsole.error)将在WebKit浏览器,包括移动Safari浏览器,很酷吧工作?

+0

也产生“控制台未定义”错误 – hoju 2010-01-14 06:01:23

+0

它的确如此,谢谢。我将编辑代码。 – 2010-01-14 06:57:21

-1

关闭我的头顶:

if(!console) 
{ 
    console = {}; 
    console.log = function() { }; 
} 
+1

也产生“控制台未定义”错误 – hoju 2010-01-14 06:00:31

2

老实说,我会使用它。它不仅覆盖了console.log(),还包括了其他所有console方法,并且行数很少。它在雅虎媒体播放器中首次使用的事实似乎表明,它也可以很好地跨浏览器。

这段代码是你最好的选择,实际上非常优雅,应该在大多数情况下都能正常工作。只要你在代码片段上面评论它的用途(以免混淆未来的开发者),你应该没问题。

0

我的最终解决方案:

if(!("console" in window)) 
    window.console = {log: function() {}}; 
1

@OcuS的解决方案确实是最好的,但您可以使用我的解决方案来提升它: C heck这种方式登录到FF控制台:Log to Firefox Error Console from JavaScript

然后添加到萤火虫。JS这3条线内IF:

window.console['error'] = li 
window.console['warn'] = li 
window.console['debug'] = li 

所以你会看到每一个控制台错误警告调试即使萤火虫关闭

4

我总是创造我交的日志浏览器包装为console.log相似的功能,它看起来像这样:

function log(a){ 
try{ 
    console.log(a); 
    }catch(er){ 
    try{ 
    window.opera.postError(a); 
    }catch(er){ 
    //no console avaliable. put 
    //alert(a) here or write to a document node or just ignore 
    } 
    } 

} 

它可以扩展任何浏览器。在IE浏览器时,在调试我建议把在最后赶上这jQuery代码:

$('body').append('<pre>'+JSON.serialize(a)+'</pre>'); 

您必须添加JSON.serialize到脚本。 IE浏览器没有它(IE8可能有,我不知道)

1

您可以使用此代码来检查是否控制台对象存在

if('console' in window && 'log' in window.console) 
{ 
    // code using console.log here 
} 

或本规范

if(typeof window.console != 'undefined' 
&& typeof window.console.log != 'undefined') 
{ 
    // code using console.log here 
} 

而且你可以阅读这篇文章 http://alexandershapovalov.com/firebug-console-is-not-defined-60/ 里面的帖子链接如何创建控制台的jQuery包装