includeAndRun pluginを少し弄ってみた

jQueryに標準で入っているjQuery.getScript関数で良い。

pluginのコード

(function($){

$.extend($,{
	includeAndRun:function(scriptUrl,callback){
		var s = $('<script/>')
			.attr({
				src:scriptUrl,
				language:'javascript',
				type:'text/javascript'
			});
		if($.browser.msie){
			s.bind('readystatechange',function(e){
				if (this.readyState === 'loaded') {
					setTimeout(callback,50);
				}
			});
		}else{
			s.bind('load',function(e){
				$(this).remove();
				callback();
			});
		}
		$('head').get(0).appendChild(s.get(0));
	}
});

})(jQuery);

せつめー

どうもreadystatechangeイベントはIEOperaで拾えるようだ。
Operaではloadイベントが拾えるのでOperaの場合もとりあえず無視。
IEの場合限定でイベントを登録することにしたけど、
元ネタに出てきた「this.readyState === 'complete'」という状態にはならないようで、
"loaded"までしか行かない。
おまけにその時点でもscriptの内容が実行されていない
or 実行されていることが保障されていないようなので、
とりあえずsetTimeoutしてみたけど、
指定した時間よりも読み込んだJavaScriptを実行するのにかかる時間が長ければアウト。
もすこし勉強してみないといけないなあ。