diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/browser.js | 33 | ||||
| -rw-r--r-- | src/ng/httpBackend.js | 31 | ||||
| -rw-r--r-- | src/ngMock/angular-mocks.js | 7 |
3 files changed, 27 insertions, 44 deletions
diff --git a/src/ng/browser.js b/src/ng/browser.js index 376c3fd4..465114c5 100644 --- a/src/ng/browser.js +++ b/src/ng/browser.js @@ -343,39 +343,6 @@ function Browser(window, document, body, $log, $sniffer) { // Misc API ////////////////////////////////////////////////////////////// - - /** - * @ngdoc method - * @name angular.module.ng.$browser#addJs - * @methodOf angular.module.ng.$browser - * - * @param {string} url Url to js file - * - * @description - * Adds a script tag to the head. - */ - self.addJs = function(url, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'); - - script.type = 'text/javascript'; - script.src = url; - - if (msie) { - script.onreadystatechange = function() { - /loaded|complete/.test(script.readyState) && done && done(); - }; - } else { - if (done) script.onload = script.onerror = done; - } - - body[0].appendChild(script); - - return script; - }; - /** * Returns current <base href> * (always relative - without domain) diff --git a/src/ng/httpBackend.js b/src/ng/httpBackend.js index b2c14b3f..d2784efa 100644 --- a/src/ng/httpBackend.js +++ b/src/ng/httpBackend.js @@ -26,11 +26,11 @@ var XHR = window.XMLHttpRequest || function() { function $HttpBackendProvider() { this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, - $document[0].body, $window.location.protocol.replace(':', '')); + $document[0], $window.location.protocol.replace(':', '')); }]; } -function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locationProtocol) { +function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) { // TODO(vojta): fix the signature return function(method, url, post, callback, headers, timeout, withCredentials) { $browser.$$incOutstandingRequestCount(); @@ -42,7 +42,7 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati callbacks[callbackId].data = data; }; - var script = $browser.addJs(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), + jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), function() { if (callbacks[callbackId].data) { completeRequest(callback, 200, callbacks[callbackId].data); @@ -50,7 +50,6 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati completeRequest(callback, -2); } delete callbacks[callbackId]; - body.removeChild(script); }); } else { var xhr = new XHR(); @@ -100,4 +99,28 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati $browser.$$completeOutstandingRequest(noop); } }; + + function jsonpReq(url, done) { + // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: + // - fetches local scripts via XHR and evals them + // - adds and immediately removes script elements from the document + var script = rawDocument.createElement('script'), + doneWrapper = function() { + rawDocument.body.removeChild(script); + if (done) done(); + } + + script.type = 'text/javascript'; + script.src = url; + + if (msie) { + script.onreadystatechange = function() { + if (/loaded|complete/.test(script.readyState)) doneWrapper(); + }; + } else { + script.onload = script.onerror = doneWrapper; + } + + rawDocument.body.appendChild(script); + }; } diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 8c50c90e..42d921e3 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -137,13 +137,6 @@ angular.mock.$Browser = function() { self.baseHref = function() { return this.$$baseHref; }; - - self.$$scripts = []; - self.addJs = function(url, done) { - var script = {url: url, done: done}; - self.$$scripts.push(script); - return script; - }; }; angular.mock.$Browser.prototype = { |
