diff options
| author | Igor Minar | 2011-12-07 07:53:57 -0800 | 
|---|---|---|
| committer | Igor Minar | 2011-12-07 07:54:09 -0800 | 
| commit | fd38655e6c8e58e7c7325b2a5937b26174ebdefa (patch) | |
| tree | 03921a8a9dc94fe3f5c2752ea84e05682da3b89f /src | |
| parent | b9001e914740ea0e3bba357a33ddaf13610c874f (diff) | |
| download | angular.js-fd38655e6c8e58e7c7325b2a5937b26174ebdefa.tar.bz2 | |
fix(): use angular.callbacks namespace for jsonp callbacks
Previously we used to put callbacks on the window object, but that
causes problems on IE8 where it is not possible to delete properties
from the window object
Diffstat (limited to 'src')
| -rw-r--r-- | src/Angular.js | 2 | ||||
| -rw-r--r-- | src/AngularPublic.js | 3 | ||||
| -rw-r--r-- | src/service/httpBackend.js | 20 | 
3 files changed, 11 insertions, 14 deletions
| diff --git a/src/Angular.js b/src/Angular.js index 9a4470eb..2a9fb556 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -101,8 +101,6 @@ var $$scope           = '$scope',      angularWidget     = extensionMap(angular, 'widget', shivForIE),      /** @name angular.module.ng */      angularInputType  = extensionMap(angular, 'inputType', lowercase), -    /** @name angular.module.ng */ -    angularCallbacks  = extensionMap(angular, 'callbacks'),      nodeName_,      uid               = ['0', '0', '0'],      DATE_ISOSTRING_LN = 24; diff --git a/src/AngularPublic.js b/src/AngularPublic.js index e5c70a8b..7664ed8c 100644 --- a/src/AngularPublic.js +++ b/src/AngularPublic.js @@ -47,7 +47,8 @@ function publishExternalAPI(angular){      'version': version,      'isDate': isDate,      'lowercase': lowercase, -    'uppercase': uppercase +    'uppercase': uppercase, +    'callbacks': {counter: 0}    });    angularModule.ng = ngModule; diff --git a/src/service/httpBackend.js b/src/service/httpBackend.js index 7443347f..6ea7df0f 100644 --- a/src/service/httpBackend.js +++ b/src/service/httpBackend.js @@ -17,31 +17,29 @@ var XHR = window.XMLHttpRequest || function() {   */  function $HttpBackendProvider() {    this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { -    return createHttpBackend($browser, XHR, $browser.defer, $window, $document[0].body, -        $window.location.href.replace(':', '')); +    return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, +        $document[0].body, $window.location.href.replace(':', ''));    }];  } -function createHttpBackend($browser, XHR, $browserDefer, $window, body, locationProtocol) { -  var idCounter = 0; - +function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locationProtocol) {    // TODO(vojta): fix the signature    return function(method, url, post, callback, headers, timeout) {      $browser.$$incOutstandingRequestCount();      if (lowercase(method) == 'jsonp') { -      var callbackId = ('angular_' + Math.random() + '_' + (idCounter++)).replace(/\d\./, ''); -      $window[callbackId] = function(data) { -        $window[callbackId].data = data; +      var callbackId = '_' + (callbacks.counter++).toString(36); +      callbacks[callbackId] = function(data) { +        callbacks[callbackId].data = data;        };        var script = $browser.addJs(url.replace('JSON_CALLBACK', callbackId), null, function() { -        if ($window[callbackId].data) { -          completeRequest(callback, 200, $window[callbackId].data); +        if (callbacks[callbackId].data) { +          completeRequest(callback, 200, callbacks[callbackId].data);          } else {            completeRequest(callback, -2);          } -        delete $window[callbackId]; +        delete callbacks[callbackId];          body.removeChild(script);        });      } else { | 
