Javascript executes twice in Internet Explorer

Currently, I am facing a problem where lazy downloaded javascript will be executed twice using Internet Explorer - and ONLY Internet Explorer (currently version 9). Firefox and Chrome work. Here is my code:

injectExternalJavaScript: function(fileUrl) { return jQuery.Deferred(function(deferred) { var script = document.createElement('script'); script['src'] = fileUrl; script['type'] = 'text/javascript'; var head = document.getElementsByTagName("head")[0]; var done = false; // Attach handlers for all browsers script['onload'] = script['onreadystatechange'] = function() { if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === 'complete')) { done = true; script['onload'] = script['onreadystatechange'] = null; head.removeChild(script); deferred.resolve(); } }; head.appendChild(script); }).promise(); } 

I already found this message and changed my code according to it, but still, i.e. executes my script twice. Do you have any ideas?

Edit: This is my decision.

 injectExternalJavaScript: function(fileUrl) { return jQuery.Deferred(function(deferred) { var script = document.createElement('script'); script['src'] = fileUrl; script['type'] = 'text/javascript'; var head = document.getElementsByTagName("head")[0]; var done = false; // Attach handlers for all browsers var cb = function() { if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === 'complete')) { done = true; script['onload'] = script['onreadystatechange'] = null; head.removeChild(script); deferred.resolve(); } } if (script.addEventListener) { script.addEventListener('load', cb, false); } else { script['onreadystatechange'] = cb; } head.appendChild(script); }).promise(); } 
+8
javascript jquery internet-explorer jquery-deferred
source share
1 answer

try it

 s = document.createElement("script"); s.src="myscript.js"; if(s.addEventListener) { s.addEventListener("load",callback,false); }else if(s.readyState) { s.onreadystatechange = callback; } document.body.appendChild(s); function callback() { console.log("loaded"); } 

taken from http://msdn.microsoft.com/en-us/library/ie/hh180173(v=vs.85).aspx

which would be for you ...

 injectExternalJavaScript: function(fileUrl) { return jQuery.Deferred(function(deferred) { var script = document.createElement('script'); script['src'] = fileUrl; script['type'] = 'text/javascript'; var head = document.getElementsByTagName("head")[0]; var done = false; // Attach handlers for all browsers var cb = function() { if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === 'complete')) { done = true; script['onload'] = script['onreadystatechange'] = null; head.removeChild(script); deferred.resolve(); } }; if ( script.addEventListener ) { script.addEventListener('load',cb, false); } else { script.onreadystatechange = cb; } head.appendChild(script); }).promise(); } 
+2
source share

All Articles