aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIgor Minar2011-12-07 07:53:57 -0800
committerIgor Minar2011-12-07 07:54:09 -0800
commitfd38655e6c8e58e7c7325b2a5937b26174ebdefa (patch)
tree03921a8a9dc94fe3f5c2752ea84e05682da3b89f /src
parentb9001e914740ea0e3bba357a33ddaf13610c874f (diff)
downloadangular.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.js2
-rw-r--r--src/AngularPublic.js3
-rw-r--r--src/service/httpBackend.js20
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 {