我的代码库/开发环境在过去一两周的某个时候出现了以下问题:
我的 JavaScript 在 Angular 控制范围内引发的任何错误都不会记录到 Firebug 控制台。
==============================
详细信息和调查:
我已尝试以下两种方法进行测试:
var x;
var y = x.test();
和
throw new Error('test');
我期望这两者的行为本质上应该是相同的:JS 停止执行并且控制台打印一条错误消息。 在我的测试中的所有情况下,这两个都表现相同,因此我将仅使用下面的抛出示例。
如果我只是在页面上包含的 Angular 脚本的开头抛出(即 .js
文件,它恰好使用了 Angular,并且位于 <script>
标记中。那么我 DO 得到我的错误。
例如
var app = angular.module("AbiApp", []);
console.log('test1'); // I see this.
throw new Error('test2'); // I DO see this.
console.log('test3'); // I don't see this. (as expected)
app.controller('HomeController', ['$scope', function ($scope) {
});
如果我在 Angular 代码中的回调中遇到错误(即不在 Angular 正常控制范围内的某个地方;在某个地方我必须添加 $apply() 才能立即更新更改),那么,再次,我确实在相关点得到了我的错误。 例如
var app = angular.module("AbiApp", []);
app.controller('HomeController', ['$scope', function ($scope) {
// We're using SignalR
$.connection.hub.start().done(function () {
console.log('test1'); // I see this.
throw new Error('test2'); // I DO see this.
console.log('test3'); // I don't see this. (as expected)
});
});
但是,如果我将错误放入 Angular 的代码中(例如,在 Controller 的定义函数顶部),或者如果我故意拼写错误 Angular 对象的依赖项之一。然后我没有在控制台上收到任何错误,但 JS 确实停止执行。 例如
app.controller('HomeController', ['$scope', function ($scope) {
console.log('test1'); // I see this.
throw new Error('test2'); // I don't see this. :(
console.log('test3'); // I don't see this.
});
或
app.controller('HomeController', ['$scpe', function ($scope) {
// ***** No error thrown.
console.log('test1'); // I don't see this.
});
如果我在 Chrome 中重复,就会恢复所有错误。 如果我禁用 Firebug 并打开 Firefox 控制台,则会恢复所有错误。
所以我得出结论,Angular 认为它不喜欢我的 Firebug 控制台,因此不会登录它,除非我直接调用 console.log()
。搞什么?
我已经尝试过:
- 将我的代码库回滚到几周前的提交,当时我 90% 确定一切正常。
- 重新启动 Firefox。
- 正在重新启动计算机。
- 重新安装 Firebug。
在任何这些情况下,症状都没有变化。
最佳答案
这根本不令人满意,但我通过恢复出厂设置 Firebug 解决了问题。
Firebug FAQ在“How do I reset all Firebug options ”上有特定条目:
Firebug 菜单 > 选项 > 重置所有 Firebug 选项
现在我在所有地方都有所有错误。
如果有人能够猜测我进入错误状态的可能是什么设置,我很想听听!
关于javascript - 为什么 Angular 无法登录到 Firebug 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33260456/