2010-10-05 19 views
3

我正在写一个JavaScript/HTML5画布库来为Web音频应用程序提供基本的GUI元素。Javascript + Firebug console.log(),如何获取异常?

有一个小小的演示脚本,它可以在库中创建小部件并在GUI中组装它们。你可以找到它@http://bitterspring.net/webshifter/

问题是,它似乎在Chrome和Firefox 3.6 - 4.0上正常工作,但在最后的情况下,只有萤火虫。如果没有萤火虫,脚本似乎在屏幕上没有任何可视化的东西,而萤火虫却可以。

唯一的与萤火虫相关的代码片段是我用来跟踪库的行为的一些console.log语句。但是,我从Firebug论坛中了解到,这些语句应该对没有Firebug功能的浏览器没有影响。在这些情况下,什么能阻止示例脚本的工作?顺便说一下,库+示例代码在http://github.com/janesconference/KievII上最新承诺。

编辑:似乎,当控制台未定义,console.log()引发异常。有没有办法保持代码的日志行并没有得到例外? (是的,我们可以检查是否控制台=不确定,但有没有更好的办法!?)

编辑:这确实的伎俩,似乎(Font

if (typeof console=="undefined"){console={log:function(A){var B=false;if(B){alert(A)}}}} 
+3

您是否检查了Javascript错误控制台?在没有“控制台”对象的窗口中运行的代码中对“console.log”的引用肯定会引发异常。 – Pointy 2010-10-05 22:40:24

+0

因此,为了使它在任何浏览器中都能正常工作,我应该删除console.log调用?在firefox 3.6中检查了 – janesconference 2010-10-05 22:48:01

+0

没有萤火虫。问题在于“控制台”未定义。总是认为通过控制台登录是透明的:| – janesconference 2010-10-05 23:54:45

回答

2

对,console对象不默认情况下可在所有浏览器中使用。

此代码:

if (typeof console=="undefined"){console={log:function(A){var B=false;if(B){alert(A)}}}} 

- 目前禁止在Firefox 4的Web控制台console支持,因为它试图打开时注入console对象,不会做,如果页面已经定义了一个console对象。

console有趣的包装处理这个问题是:http://benalman.com/projects/javascript-debug-console-log/,虽然我没有尝试过自己。

+0

其实它与FF4一起工作。你是什么意思?“它试图在打开时注入控制台对象,如果页面已经定义了控制台对象,将不会这样做”? – janesconference 2010-11-09 14:32:49

+0

@janesconference:该句中的“it”指的是Web控制台。在我写信的时候,我认为如果你在页面中运行该代码并在之后打开Web控制台,console.log()消息仍然会由你的包装器alert()。我不记得我是否测试了这一说法。 – Nickolay 2010-11-09 16:29:58