javascript - 可以从 $window.onerror 捕获 Angular 应用程序中的 JavaScript 错误

标签 javascript angularjs onerror

在我的 app.module().run() 中,我设置了一条 onerror 消息,以便在遇到 javascript 错误时弹出一条 toastr 消息。

我希望它适用于我的整个 ngApp。这可能吗?

由于 asdf 是无效的 JavaScript,以下代码弹出了一个 toast。

angular.module("app").run(['notificationFactory', '$window',
    function (notificationFactory, $window) {
    $window.onerror = function (errorMsg, url, lineNumber) {
        notificationFactory.error(errorMsg);
   };

   asdf
}]);

但是如果我将“asdf”放入 Controller ,$window.onerror 不会触发。

是否可以通过全局 onerror 调用来捕获它?

App.run 在我的 app.js 文件中,并在我的 Controller 之前加载。

在我的 Controller 中,我似乎根本无法让 $window.onerror 工作。我尝试将 onerror 函数移至 Controller 。我还尝试查看 img 标签是否会生成错误但无济于事。

<img ng-src="someFileThatDoesntExist.png" />

最佳答案

您可以装饰 $exceptionHandler 提供者。试试下面;

(function () {
    'use strict';

var app = angular.module('myApp');

// Configure by setting an optional string value for appErrorPrefix.
// Accessible via config.appErrorPrefix ().

app.config(['$provide', function ($provide) {
    $provide.decorator('$exceptionHandler',
        ['$delegate', 'notificationFactory', extendExceptionHandler]);
}]);

// Extend the $exceptionHandler service to also display a toast.
function extendExceptionHandler($delegate, notificationFactory) {
    var appErrorPrefix = 'myPrefix';
    return function (exception, cause) {
        $delegate(exception, cause);
        if (appErrorPrefix && exception.message.indexOf(appErrorPrefix) === 0) { return; }

        var errorData = { exception: exception, cause: cause };
        var msg = appErrorPrefix + exception.message;
        notificationFactory.error(msg);
        console.log(appErrorPrefix, errorData)
    };
}
})();

关于javascript - 可以从 $window.onerror 捕获 Angular 应用程序中的 JavaScript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27782933/

相关文章:

javascript - 这是我调整 iframe 大小并需要一些编辑的 javascript

Javascript:始终小于任何其他日期的最小日期

java - 将 JavaScript 函数转换为 Java

javascript - 哪个函数声明更快? var functionName 或 this.functionname

javascript - 从一个 div 过渡到另一个 div

javascript - window.onerror 不在 Firefox 中触发

javascript - 如何判断 &lt;script&gt; 标签加载失败

angular - 如何在音频对象的onerror事件中访问全局变量

javascript - 单击元素时更改 fontawesome 图标/类

javascript - angularjs ng-click 和 anchor 上的 href