让我疯狂的一件事是Javascript在许多不同的情况下如何无声地失败.
(删除示例,因为它混淆了我的问题的重点)
很多时候我遇到过一个错误,它会在输入Firebug控制台时发出错误消息,但是当它在页面脚本中运行时,它会无声地失败,即使Firebug控制台处于活动状态并且打开!
其中一些问题可以被克罗克福德的JsLint捕获,但仍有许多人不会.
有没有办法在浏览器中启用更多错误消息?
你可以在不使用javascript调试环境的情况下完成这项工作吗?我觉得调试器对我帮助不大.我通常会撒上一些console.log()语句,可以在一分钟内找到问题所在.让我疯狂的是,Javascript中的无声错误很长一段时间都会被忽视,或者以一种根本不明显的方式出现.更令人沮丧的是因为在控制台中测试语句会出错,所以发生了什么?
顺便提一句,我遇到了同样的问题,是否有人注意到这一点?通常我的throw new陈述根本不起作用.但如果我在控制台中键入相同的内容,它确实如此.
感谢您的有用评论(第一个答案),但这不是我的问题.当您需要清理类的参数时,例如,当您不确定环境时,这些测试非常有用.您不希望测试您希望它们存在的属性或类的存在; 这将无缘无故地膨胀代码.
我为我的网站启用了Firebug的scipts.
但我在Script dropdwon菜单中看不到任何内容.
"网络"选项卡将它们列为"确定".
我试过另一个网站不是我同样的事情?
我正在寻找一种方法来调试动态加载的jQuery document.ready函数.
显然我不能只调出脚本面板并用鼠标添加断点,因为那里没有函数.
我也试过添加"调试器"; 功能(没有引号),但没有做任何事情.我已经确保在我尝试这个时实际执行了该功能.
谢谢你的帮助,
阿德里安
编辑:我刚刚注意到Firebug实际上在调试中断了.但是,当它在动态加载的脚本上执行此操作时,它不像往常那样显示该脚本的源代码.另外,调用堆栈在我自己的代码下面结束.我可以通过调用堆栈调出document.ready的实现,但这并没有真正帮助.这是一个Firebug错误还是我错过了什么?
我喜欢FF3.6上的Firebug字体.安装FF4后,适当的Firbug 1.7字体已更改.我怎样才能为Firebug选择字体?
我最近做了很多ajax的东西.我一遍又一遍地重复的情景是:
我想要做的是告诉firebug仅重新加载脚本而不是整个页面,因为标记是相同的.无论如何要做到这一点?
我有一堆html5视频元素,其preload属性设置为"auto".他们开始加载很好,但我认为他们的缓存可能有问题,因为每次我重新加载页面(没有清除缓存),他们重新开始.
当我在firebug中检查网络面板时,我注意到其他所有内容(图像和文件)都给了我一条"304未修改"的消息,而视频(和音频)文件给了我一个"206部分内容"消息,在重复的条目中.
当页面加载清除缓存时,"206部分内容"响应也出现在重复条目中,而不是像预期的那样"200 OK"响应.
这是视频和音频元素的正常行为吗?如果没有,怎么能纠正?
我有一个实用程序函数,它用一个条件包装console.log,所以如果我们在dev环境中并且console.log存在,我们只调用console.log:
/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
return function (message) {
if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
console.log(message);
}
};
}());
Run Code Online (Sandbox Code Playgroud)
这对于普通的控制台日志非常有效.但是我最近发现了向console.log传递多个参数的乐趣:它允许您使用字符串为控制台日志添加前缀,因此console.log('DEBUG', object)输出字符串以及可以检查其属性的可扩展对象.如何更改我的conlog功能来执行此操作?我已经尝试注销这样的所有参数:
metro.conlog = (function () {
return function (message) {
if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
console.log(arguments);
}
};
}());
Run Code Online (Sandbox Code Playgroud)
但是这会将参数作为数组输出,而不是使用console.log获得的整齐线.您可以在此屏幕截图中看到差异:

谁能告诉我如何重现原始日志输出?
我的网站在Firefox和Chrome中都返回了一些奇怪的警告信息和错误.
Firefox返回以下错误:
GET http://fonts.googleapis.com/css?family=Varela+Round 200 OK 7c8e43d.js (line 18)
13:27:41.46 CSI/tbsd_
13:27:41.48 CSI/_tbnd
Run Code Online (Sandbox Code Playgroud)
Chrome会返回此错误:
XMLHttpRequest cannot load http://fonts.googleapis.com/css?family=Varela+Round. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
我猜这个问题与谷歌字体API有关,Access-Control-Allow-Origin我该如何解决这个错误呢?
我正在阅读这个问题的答案(关于"wat"视频),它说:
{}+[]我目前正在从"权威指南"学习JS,所以我试着真正理解这样的事情.
我的问题是,JS何时决定将其解释{}为空代码块,而不是空对象?
另外,我想了解Node.js和Firebug之间的一些不一致之处.
萤火虫:
![用于<code> {} [] </ code>和<code>({} [])</ code>的Firebug控制台输出](https://i.stack.imgur.com/4JnaG.png)
Node.js的:
![<code> {} [] </ code>和<code>({} [])</ code>的Node.js输出](https://i.stack.imgur.com/KqbIH.png)
我今天打开了一个Firefox,点击了Firebug按钮,它向我展示了在新版本中它被集成到开发人员工具中.
我点击确定并意识到它根本不起作用(每次使用Inspect Element时<body>都会选择该元素).所以我想恢复该设置,但我找不到在哪里切换它.我尝试重新安装Firebug,但该设置存储在某处,因此它会自动启动DevTools而不是Firebug.
任何帮助如何恢复到经典的Firebug?
firebug ×10
javascript ×5
firefox ×3
debugging ×2
console ×1
fonts ×1
html5-video ×1
http ×1
jquery ×1
node.js ×1