diff options
| author | Igor Minar | 2012-04-09 14:27:14 -0700 | 
|---|---|---|
| committer | Igor Minar | 2012-04-09 17:59:47 -0700 | 
| commit | fbaa1968b7c596ccb63ea8b4be1d3bd92eda50d8 (patch) | |
| tree | f67c6b8cf724431efead5197cced66dc2340f9f5 /src/ng/httpBackend.js | |
| parent | 13d5528a5f5a2f0feee5c742788a914d2371841e (diff) | |
| download | angular.js-fbaa1968b7c596ccb63ea8b4be1d3bd92eda50d8.tar.bz2 | |
chore($browser): remove the addJs method
this was never meant to be a public api used by apps. I refactored
the code to hide the functionality.
BREAKING CHANGE: $browser.addJs method was removed
apps that depended on this functionality should either use many of the
existing script loaders or create a simple helper method specific to the
app.
Diffstat (limited to 'src/ng/httpBackend.js')
| -rw-r--r-- | src/ng/httpBackend.js | 31 | 
1 files changed, 27 insertions, 4 deletions
| 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); +  };  } | 
