Подтвердить что ты не робот

"ТипError: незаконный вызов" при попытке обновления с v1.2

Изменить: Похоже, что это может быть связано с Chrome v43, я понижен до версии v42, и все работает нормально.

Изменить: Я отправил issue в репозиторий Angular Github.

Кажется, что ошибка return logFn.apply(console, args); строка 12221 в источнике angular.js.

Здесь ссылка с ошибкой Chromium.

Любые советы о том, что делать сейчас?


Я пытаюсь перенести свое приложение из AngularJS v1.2 в v1.3 или v1.4, но я получаю TypeError: Illegal invocation в Chrome (попытался выиграть, osx и ubuntu).

Трассировка стека не помогает:

TypeError: Illegal invocation
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at Scope.$get.Scope.$digest (angular.js:15550)
    at Scope.$get.Scope.$apply (angular.js:15824)
    at done (angular.js:10263)
    at completeRequest (angular.js:10435)
    at XMLHttpRequest.requestLoaded (angular.js:10376)

Итак, это как-то связано с запросами AJAX, но я также получаю:

TypeError: Illegal invocation
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at equals (angular.js:1034)
    at Scope.$get.Scope.$digest (angular.js:15550)
    at Scope.$get.Scope.$apply (angular.js:15824)
    at tick (angular.js:10983)

Я использую $interval для обновления класса модели (который является factory и отражается в представлениях через установку $scope.client для этого класса):

var runTimer = function () {
    self.timeOnline = time(self.timeSoFar);
    self.timeSoFar = Date.now() / 1000 - self.alarmTriggeredTime;
};

$interval(runTimer, 1000);

Я думаю, что проблема с $digest/$apply. Я потратил несколько часов на отладку, но до сих пор не понял, что происходит.

Любые указатели на дальнейшую отладку очень ценятся.

4b9b3361

Ответ 1

Между angular -issue хром-ошибка, webkit-bug и (я даже не знаю, что это такое) что-то-Webkit-вопрос казалось бы, что все (ну, в основном все) бросают свои руки в воздух. Возможно, я ошибаюсь, говоря это неправильно.

Во всяком случае, я не смог получить случай window.history.back для журнала, не вызывая Illegal Invocation, но я смог сделать console.log.call(window, 'x') со следующим фрагментом:

(function() { console.log = console.log.bind(console); }());

(взято прямо из последней ссылки, благодарит Брайана!)

Просто похлопайте это в верхней части вашего документа HTML/где хотите (я думаю).


Я супер любопытно, что произойдет, если вы будете запускать этот @Ignas. Я не могу воспроизвести проблему, связанную с Factory привязкой к $scope, и выполнить ее $interval.

Хотелось бы увидеть, имеет ли он какой-либо эффект (хотя и не функциональный, но более декоративный, я полагаю).

Sidenote; Я, будучи новичком, я, мне просто сообщили мои сверстники, что console.log.call(window) действительно вызовет ошибку незаконного вызова, так что это неэмиссионная афа. Все еще интересно, будет ли это влиять на logFn внутри Angular.