From: Krinkle Date: Sun, 24 Jul 2011 20:38:49 +0000 (+0000) Subject: More mediawiki.js cleanup (addScript AJAX) X-Git-Tag: 1.31.0-rc.0~28650 X-Git-Url: http://git.cyclocoop.org/%7B%7B%20url_for%28%27admin_vote_del%27%2C%20idvote=vote.voteid%29%20%7D%7D?a=commitdiff_plain;h=d8336d3e84c42e61b0d978fc8871273dabb22885;p=lhc%2Fweb%2Fwiklou.git More mediawiki.js cleanup (addScript AJAX) - Update and merge in jQuery fixes: -- Dereference script (added) -- Order of actions -- Regex instead of two string comparisons -- Unit tests still pass :) Follows up: r92933, 93012 --- diff --git a/resources/mediawiki/mediawiki.js b/resources/mediawiki/mediawiki.js index fd3f03e084..4bb14a3f5b 100644 --- a/resources/mediawiki/mediawiki.js +++ b/resources/mediawiki/mediawiki.js @@ -685,23 +685,30 @@ window.mw = window.mediaWiki = new ( function( $ ) { script.setAttribute( 'src', src ); script.setAttribute( 'type', 'text/javascript' ); if ( $.isFunction( callback ) ) { - // Attach handlers for all browsers -- this is based on jQuery.getScript + // Attach handlers for all browsers -- this is based on jQuery.ajax script.onload = script.onreadystatechange = function() { + if ( !done && ( - !this.readyState - || this.readyState === 'loaded' - || this.readyState === 'complete' + !script.readyState + || /loaded|complete/.test( script.readyState ) ) ) { + done = true; - callback(); + // Handle memory leak in IE script.onload = script.onreadystatechange = null; + + callback(); + if ( script.parentNode ) { script.parentNode.removeChild( script ); } + + // Dereference the script + script = undefined; } }; }