Невозможно перехватить необработанные ошибки в приложениях Ionic 1 - PullRequest
0 голосов
/ 22 ноября 2018

Мы пытаемся настроить детектор глобальных неуправляемых ошибок верхнего уровня в нашем гибридном приложении Ionic 1.Следуя этой документации , мы подписались на window.addEventListener, чтобы сделать это, но она почти ничего не захватывает.Затем мы начали использовать Angle's $ exceptionHandler , и это частично решает проблему, но в ней по-прежнему отсутствуют ошибки HTTP и сценариев.Подробности:

  • ошибки ресурса (ошибки загрузки изображения, ошибки синтаксического анализа скрипта) не обрабатываются ни window.addEventListener, ни $ AngleHandler
  • Angular, выдаваемыми при загрузке контроллера, ионными событиями, такими какbeforeEnter, ионные методы, вызываемые из пользовательского интерфейса через привязки событий шаблонов, вызовы ajax ... ни один из них не обрабатывается window.addEventListener - $ exceptionHandler от Angular не обрабатывает их
  • Удивительно, но весь код, запланированный с помощью setTimeout из всех этих мест правильно обрабатывается window.addEventListener

Следующие файлы демонстрируют все, что было гарантировано:

// app.js

angular.module("starter", [dependencies]).config(function () {
    window.addEventListener("error", function (event) {
        console.error("Error caught", event);
    });
});

.

// controllers.js

angular.module('starter.controllers', [dependencies]).controller("HomeCtrl", function ($scope, $http) {
    var nullVariable = null;
    var assignmentTarget;

    $scope.testClick = function () {
        setTimeout(function () {
            assignmentTarget = nullVariable.testClickTimeout; // handled
        }, 0);

        assignmentTarget = nullVariable.testClick; // unhandled
    };

    $scope.$on('$ionicView.beforeEnter', function () {
        setTimeout(function () {
            assignmentTarget = nullVariable.homeCtrlBeforeEnterTimeout; // handled
        }, 0);

        assignmentTarget = nullVariable.homeCtrlBeforeEnter; // unhandled
    });

    $http({
        method: "GET",
        responseType: "json",
        url: "comeurl"
    }).then(function (response) {
        setTimeout(function () {
            assignmentTarget = nullVariable.ajaxResponseTimeout; // handled
        }, 0);

        assignmentTarget = nullVariable.ajaxResponse; // unhandled
    });

    setTimeout(function () {
        assignmentTarget = nullVariable.homeCtrlTimeout; // handled
    }, 0);

    assignmentTarget = nullVariable.homeCtrl; // unhandled

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...