複数のjsファイルをそれぞれの読み込み・評価完了まで待ちながら順番にappendChild()する(jQueryとそのプラグインとか依存があるもの対策)

ブックマークレットからjQueryjQuery.blockUIを使いたかったので書いてみた
IE6とfirefox2ではこれで動いてた

var RSLoader = function(arr, callback){
	this.target   = arr;
	this.index    = 0;
	this.callback = callback;
	this.load();
};
RSLoader.prototype = {
	load : function(){
		index = this.index;
		if(this.target.length <= index){
			if(this.callback)
				this.callback();
			return;
		}
		var src = this.target[index].src;
		var obj = this.target[index].obj;
		
		if (!eval("window." + obj)) {
			s = document.createElement('script');
			s.charset = 'utf-8'; //問題?
			s.type = 'text/javascript';
			s.src = src;
			document.body.appendChild(s);			
		}
		var total    = 0;
		var interval = 200;
		var timeout  = 3000;
		var loader   = this;
		var timer = setInterval(function(){
			if(eval("window." + obj)){
				clearInterval(timer);
				loader.index++;
				loader.load();
			}else{
				total += interval;
				if(timeout < total){
					alert("読み込みがタイムアウトしました。中断します。");
					clearInterval(timer);
				}
			}
		}, interval);
	}
}

var rsLoader = new RSLoader(
	[{src : 'http://hoge.com/jquery.js',
	  obj : 'jQuery'},
	 {src : 'http://hoge.com/jquery.blockUI.js',
	  obj : 'jQuery.blockUI'}
	],
	//これがロード完了後にコールバックされる
	function(){
		start();
	}
);
  • 使い方
javascript:(function(){var s = document.createElement('script');s.charset = 'utf-8';s.type = 'text/javascript';s.src = 'http://hoge.com/hoge.js';document.body.appendChild(s);})();

ブックマークレットを↑のように書いて
スクリプト内で動的に必要なライブラリを読み込む