La aplicación de browser mobile Angular.js se bloquea en iOS 8 Safari

Nuestra aplicación web Angular.js a veces se congela en iOS8 Safari. Cuando ocurre este problema, la callback ng-click no se desencadena. Si reemplaza ng-click con un javascript onclick regular, funcionaría. No sucede en Chrome en dispositivos iOS8.

¿Alguien más ha notado este problema en iOS8 Safari o tiene alguna solución?

Esta vista simple se congela a veces en el safari iOS8 . La congelación generalmente ocurre cuando tienes la pestaña abierta, ve a otras tabs en el browser o tal vez abandonas la experiencia del browser y vuelves más tarde. En este ejemplo, cuando la vista se congela mientras toca los enlaces, tapCount no aumenta. Cuanto más complicada sea la vista, más fácil se congela. En este ejemplo, el browser se congela durante unos segundos cuando presiono los enlaces rápidamente. Por lo general, el congelamiento lleva más time en las vistas reales complicadas.

var app = angular.module('myApp', []); app.controller('freezeCtrl', function($scope) { $scope['tapCount'] = 0; $scope['dummyItems'] = []; for(var i = 0; i < 15; i++) { var anItem = {'id': i}; ($scope['dummyItems']).push(anItem); } $scope['updateTapCount'] = function() { $scope.tapCount += 1; }; }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script> <div ng-app="myApp"> <div ng-controller="freezeCtrl"> <p>Tap Count = {{tapCount}}</p> <ul> <li ng-repeat="item in dummyItems" bindonce> <p>This is a dummy item #{{item.id}}</p> </li> </ul> <div> <button ng-click="updateTapCount()">Button 1</button> <button ng-click="updateTapCount()">Button 2</button> </div> </div> </div> 

¡Encontré la solución y parece que encontré la solución justo cuando alguien arregló el error en Angular! Se corrigió en Angular 1.3.x.

El error está en "isArrayLike" en el código angular.js. Algunas veces mientras obj.length no está definido después de la asignación "var length = obj.length;" longitud variable obtiene el valor "1". Esto daría como resultado que isArrayLike devuelve true para los objects que no son arrayLike. Este error, en particular, rompería angulares paraEach y posteriormente a "eventHandler" de JQLite. Entonces, ningún controller de events se ejecutaría cuando esto sucediera.