mobile safari readonly

by provegard

HTML

<script src="https://code.angularjs.org/1.2.28/angular.js"></script>
<script src="https://code.angularjs.org/1.2.28/angular-route.js"></script>
<div ng-controller="TestController">
    <p>{{view.status}}</p>
    <br/><br/><br/><br/>
    <a href="" ng-click="createScopes()">Wreck havoc</a>
    <br/><br/><br/><br/>

    <a href="#/viewA">xxx A xxx</a>
    <a href="#/viewB">xxx B xxx</a>

    <div ng-view=""></div>
</div>
<script type="text/ng-template" id="viewA">This is view A</script>
<script type="text/ng-template" id="viewB">This is view B</script>

JavaScript

m = angular.module("myApp", ["ngRoute"]);

m.config(function ($routeProvider) {
    $routeProvider.when("/viewA", { templateUrl: "viewA" });
    $routeProvider.when("/viewB", { templateUrl: "viewB" });
    $routeProvider.otherwise({redirectTo: "/viewA"});
});

m.run(function ($rootScope) {
    $rootScope.view = {
        status: "all ok"
    };
});

m.factory('$exceptionHandler', function($injector) {
  return function(exception, cause) {
      var msg = exception.message;
      var rs = $injector.get("$rootScope");
      rs.view.status = msg;
  };
});

m.controller("TestController", function ($scope) {
    //$scope.view.status = "Go ahead, click it!";
    $scope.createScopes = function () {
        var scopes = [];
        for (var i = 0; i < 1000; i++) {
            try {
                scopes.push($scope.$new());
            } catch (e) {
                $scope.view.status = e.message;
                break;
            }
        }
        
        while (scopes.length) {
            scopes.shift().$destroy();
        }
        $scope.view.status = "No errors";
    };
});