0

我正在构建一个有角度的 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 获取堆栈跟踪?

谢谢

4

0 回答 0