diff --git a/src/Angular.js b/src/Angular.js index 127be95d4a29..9e08d4babe07 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 663011045786..16045af7e13e 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/browser.js b/src/service/browser.js index 2e2c07e8ad95..4d093ae99055 100644 --- a/src/service/browser.js +++ b/src/service/browser.js @@ -96,18 +96,18 @@ function Browser(window, document, body, XHR, $log, $sniffer) { self.xhr = function(method, url, post, callback, headers) { outstandingRequestCount ++; if (lowercase(method) == 'json') { - var callbackId = ("angular_" + Math.random() + '_' + (idCounter++)).replace(/\d\./, ''); - window[callbackId] = function(data) { - window[callbackId].data = data; + var callbacks = window.angular.callbacks; + var callbackId = '_' + (callbacks.counter++).toString(36); + callbacks[callbackId] = function(data) { + callbacks[callbackId].data = data; }; - - var script = self.addJs(url.replace('JSON_CALLBACK', callbackId), function() { - if (window[callbackId].data) { - completeOutstandingRequest(callback, 200, window[callbackId].data); + var script = self.addJs(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), function() { + if (callbacks[callbackId].data) { + completeOutstandingRequest(callback, 200, callbacks[callbackId].data); } else { completeOutstandingRequest(callback); } - delete window[callbackId]; + delete callbacks[callbackId]; body[0].removeChild(script); }); } else { diff --git a/test/service/browserSpecs.js b/test/service/browserSpecs.js index 5234f0bef5aa..aa02d451b89d 100644 --- a/test/service/browserSpecs.js +++ b/test/service/browserSpecs.js @@ -44,6 +44,8 @@ function MockWindow() { replaceState: noop, pushState: noop }; + + this.angular = angular; } describe('browser', function() { @@ -135,15 +137,16 @@ describe('browser', function() { expect(scripts.length).toEqual(1); var script = scripts[0]; var url = script.src.split('?cb='); + expect(url[1]).toMatch(/angular\.callbacks\._\d+/); + var callbackId = url[1].split('\.')[2]; expect(url[0]).toEqual('http://example.org/path'); - expect(typeof fakeWindow[url[1]]).toEqual('function'); - fakeWindow[url[1]]('data'); + expect(typeof fakeWindow.angular.callbacks[callbackId]).toEqual('function'); + fakeWindow.angular.callbacks[callbackId]('data'); script.onload(); - expect(notify).toHaveBeenCalled(); expect(log).toEqual('200:data;'); expect(scripts).toEqual(removedScripts); - expect(fakeWindow[url[1]]).toBeUndefined(); + expect(fakeWindow.angular.callbacks[callbackId]).toBeUndefined(); }); @@ -166,7 +169,8 @@ describe('browser', function() { var script = scripts[0]; var url = script.src.split('?cb='); - fakeWindow[url[1]]('data'); + var callbackId = url[1].split('\.')[2]; + fakeWindow.angular.callbacks[callbackId]('data'); script.onload(); expect(notify).toHaveBeenCalled(); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy