« ステートレスとステートフル | メイン | 業界の重鎮が語るIT業界不人気の理由 »

rosy.js ログウィンドウを色んなページに表示させるBookmarklet

まだ開発中ですが(今週末0.3.0をリリースする予定)。

JavaScript を実行するコマンド入力欄とログコンソールを表示させるBookmarklet です。

start rosy log window

このBookmarkletでは、rosy.js と rosy_bookmarklet.js をロードしていて、rosy_bookmarklet.js の中で rosy.js の関数とかを呼んでいるのですが、普通にロードしただけだと、rosy.js がページにロードされる前にrosy_bookmarklet.jsのコードが実行されてしまい、エラーになってしまいます。

そこをどうやって解決しようかと考えて書いたのが↓このコード(rosy_bookmarklet.js)。

function loadRosyLogWindow(){
	try{
	if(RosyLog && Rosy){
		rlog = new RosyLog();
		rlog.use = true;
		rlog.d('start rosy log window.');
		rlog.d('Rosy.version : ' + Rosy.Version);
		document.getElementById('rosyLogConsoleInput').focus();
		clearInterval(rosyStartTimer);
	}
	}catch(e){
		//
	}
}
var rosyStartTimer;
if(!rosyStartTimer) rosyStartTimer = setInterval(loadRosyLogWindow,500);
var rlog;

rosyStartTimer が定義されていないときだけ setInterval で 0.5秒ごとにloadRosyLogWindow()を実行するようにしてます。 で、loadRosyLogWindow() の中では、rosy.js の中で定義されている RosyLog と Rosy がロードされている(if の条件句に入れたときに true が返ってくる)ときだけ、ログを出力して、rosyStartTimer をclearInterval してやります。

こういう解決法ってどうなんだろ。