mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-24 02:10:24 +00:00
fix($browser.addJs): make addJs jQuery compatible
Change addJs implementation to avoid use of jQuery because of issues that affect angular-ie-compat.js. See inlined comment for more info.
This commit is contained in:
parent
c52e749a6e
commit
47efe44a1d
2 changed files with 41 additions and 7 deletions
|
|
@ -416,16 +416,26 @@ function Browser(window, document, body, XHR, $log) {
|
|||
* @methodOf angular.service.$browser
|
||||
*
|
||||
* @param {string} url Url to js file
|
||||
* @param {string=} dom_id Optional id for the script tag
|
||||
* @param {string=} domId Optional id for the script tag
|
||||
*
|
||||
* @description
|
||||
* Adds a script tag to the head.
|
||||
*/
|
||||
self.addJs = function(url, dom_id) {
|
||||
var script = jqLite(rawDocument.createElement('script'));
|
||||
script.attr('type', 'text/javascript');
|
||||
script.attr('src', url);
|
||||
if (dom_id) script.attr('id', dom_id);
|
||||
body.append(script);
|
||||
self.addJs = function(url, domId) {
|
||||
// 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
|
||||
//
|
||||
// We need addJs to be able to add angular-ie-compat.js which is very special and must remain
|
||||
// part of the DOM so that the embedded images can reference it. jQuery's append implementation
|
||||
// (v1.4.2) fubars it.
|
||||
var script = rawDocument.createElement('script');
|
||||
|
||||
script.type = 'text/javascript';
|
||||
script.src = url;
|
||||
if (domId) script.id = domId;
|
||||
body[0].appendChild(script);
|
||||
|
||||
return script;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -505,4 +505,28 @@ describe('browser', function(){
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('addJs', function() {
|
||||
|
||||
it('should append a script tag to body', function() {
|
||||
browser.addJs('http://localhost/bar.js');
|
||||
expect(scripts.length).toBe(1);
|
||||
expect(scripts[0].src).toBe('http://localhost/bar.js');
|
||||
expect(scripts[0].id).toBe('');
|
||||
});
|
||||
|
||||
|
||||
it('should append a script with an id to body', function() {
|
||||
browser.addJs('http://localhost/bar.js', 'foo-id');
|
||||
expect(scripts.length).toBe(1);
|
||||
expect(scripts[0].src).toBe('http://localhost/bar.js');
|
||||
expect(scripts[0].id).toBe('foo-id');
|
||||
});
|
||||
|
||||
|
||||
it('should return the appended script element', function() {
|
||||
var script = browser.addJs('http://localhost/bar.js');
|
||||
expect(script).toBe(scripts[0]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue