Attualmente mi sono imbattuto in un problema in cui un javascript pigro veniva eseguito due volte utilizzando Internet Explorer - e SOLO Internet Explorer (attualmente versione 9). Firefox e Chrome funzionano. Qui è il mio codice:Javascript esegue due volte in Internet Explorer
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();
}
ho già trovato this posting e ha cambiato il mio codice in base ad esso, ma ancora è cioè l'esecuzione di mio script due volte. Ragazzi avete qualche idea?
Edit: Questa è la mia soluzione
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();
}
In alternativa potresti apprezzare il caricatore JS [head.js] (http://headjs.com/). –
Questa non è una soluzione perché non voglio caricare più script del necessario. – mayrs