可以在 $window.onerror 的 Angular 应用程序中捕获 JavaScript 错误
Possible to catch JavaScript errors within an Angular app from $window.onerror
在我的 app.module().run() 中,我设置了一条 onerror 消息,以便在遇到 javascript 错误时弹出一条 toastr 消息。
我希望它适用于我的整个 ngApp。这可能吗?
以下代码弹出吐司,因为 asdf 无效 JavaScript。
angular.module("app").run(['notificationFactory', '$window',
function (notificationFactory, $window) {
$window.onerror = function (errorMsg, url, lineNumber) {
notificationFactory.error(errorMsg);
};
asdf
}]);
但是如果我将 'asdf' 放入控制器中,$window.onerror 不会触发。
是否可以通过全局 onerror 调用来捕获它?
App.run 在我的 app.js 文件中,并在我的控制器之前加载。
在我的控制器中,我似乎根本无法让 $window.onerror 工作。我尝试将 onerror 函数移至控制器。我还尝试查看 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)
};
}
})();
window.onerror 事件不会因控制台错误而触发。以下是如何从控制台手动触发 window.onerror 事件:
setTimeout(function() { notThere(); }, 0);
在我的 app.module().run() 中,我设置了一条 onerror 消息,以便在遇到 javascript 错误时弹出一条 toastr 消息。
我希望它适用于我的整个 ngApp。这可能吗?
以下代码弹出吐司,因为 asdf 无效 JavaScript。
angular.module("app").run(['notificationFactory', '$window',
function (notificationFactory, $window) {
$window.onerror = function (errorMsg, url, lineNumber) {
notificationFactory.error(errorMsg);
};
asdf
}]);
但是如果我将 'asdf' 放入控制器中,$window.onerror 不会触发。
是否可以通过全局 onerror 调用来捕获它?
App.run 在我的 app.js 文件中,并在我的控制器之前加载。
在我的控制器中,我似乎根本无法让 $window.onerror 工作。我尝试将 onerror 函数移至控制器。我还尝试查看 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)
};
}
})();
window.onerror 事件不会因控制台错误而触发。以下是如何从控制台手动触发 window.onerror 事件:
setTimeout(function() { notThere(); }, 0);