From fd38655e6c8e58e7c7325b2a5937b26174ebdefa Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Wed, 7 Dec 2011 07:53:57 -0800 Subject: 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 --- src/service/httpBackend.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'src/service/httpBackend.js') 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 { -- cgit v1.2.3