まだ開発中ですが(今週末0.3.0をリリースする予定)。
JavaScript を実行するコマンド入力欄とログコンソールを表示させるBookmarklet です。
この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 してやります。
こういう解決法ってどうなんだろ。