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(); }
javascript jquery internet-explorer jquery-deferred
mayrs
source share