我正在构建一个有角度的 Web 应用程序,我想将任何 javascript 异常和调用堆栈从客户端发送到服务器以进行日志记录。在 chrome 和 firefox 中,我可以通过查看 exception.stack 属性来获取调用堆栈,但是在使用 IE 时该值不可用。这是我的角度控制器的代码示例:
function LogTestController($scope) {
$scope.TestError = function () {
callError1();
}
function callError1() {
callError2();
}
function callError2() {
var x = y;
}
};
这是来自 chrome 的 exception.stack:
"ReferenceError: y is not defined
at callError2 (http://localhost:85/App/Offer/OfferController.js:16:17)
at callError1 (http://localhost:85/App/Offer/OfferController.js:12:9)
at Scope.LogTestController.$scope.TestError (http://localhost:85/App/Offer/OfferController.js:8:9)
at $parseFunctionCall (http://localhost:85/Scripts/angular.js:12345:18)
at ngEventDirectives.(anonymous function).compile.element.on.callback (http://localhost:85/Scripts/angular.js:21435:17)
at Scope.$get.Scope.$eval (http://localhost:85/Scripts/angular.js:14401:28)
at Scope.$get.Scope.$apply (http://localhost:85/Scripts/angular.js:14500:23)
at HTMLButtonElement.<anonymous> (http://localhost:85/Scripts/angular.js:21440:23)
at HTMLButtonElement.jQuery.event.dispatch (http://localhost:85/Scripts/jquery-1.9.1.js:3074:9)
at HTMLButtonElement.jQuery.event.add.elemData.handle (http://localhost:85/Scripts/jquery-1.9.1.js:2750:46)"
这对调试很有帮助。但是当错误发生在角度控制器内部时,IE 没有 extension.stack 属性。
但是,如果我在 IE 不在角度控制器内时强制执行相同的错误,那么 exception.stack 会有一个值。这是该代码的示例:
<script type="text/javascript">
try {
first();
} catch (exception) {
var trace = exception.stack;
};
function first() {
second();
};
function second() {
var x = y;
}
</script>
在 IE 中,exception.trace 如下:
"ReferenceError: 'y' is undefined
at second (http://localhost:85/App/logtest.html:20:13)
at first (http://localhost:85/App/logtest.html:16:13)
at Global code (http://localhost:85/App/logtest.html:10:13)"
我也尝试使用 stacktrace.js 从 IE 获取调用堆栈,但是这个库依赖于存在的 exception.stack 值。
有人可以帮我理解为什么在角度控制器内部时这会有所不同,以及如何从角度控制器内部的 IE 获取堆栈跟踪?
谢谢