2010/02/26

気が向いたら調べる(FUEL addListenerの怪)

SQLite Optimizerの再起動回数を表示するアドオンを作る時に、SQLite Optimizerのコードを参考にしていたのですが、SQLite Optimizerでは下記のコードで終了イベントにハンドラーを追加していました。

21:Application.events.addListener('quit', sql_opt_listener );

これに習って、ComplementSQLiteOptimizerでは(起動時に処理したいので)イベント名を"load"にしてみたのですが、起動時に登録されず。"ready"というイベントもあるらしいのですが、そちらでも反応せず。

2時間ぐらい調べた挙句、"Application"オブジェクトを使うのを止めました。

11:window.addEventListener("load", ComplementSQLiteOptimizer, true);

また、途中確認のため、"quit"でテストコードを書いてみました。

1:var ComplementSQLiteOptimizer = { 2: handleEvent : function(event) { 3: alert("test"); 4: } 5:} 6: 7:Application.events.addListener("quit", ComplementSQLiteOptimizer);

すると、なぜか終了時に"test"が2回表示されます。試しにComplementSQLiteOptimizerが完成後に何回か再起動を繰り返してみたのですが、やはりカウントが2づつ減る事があります。毎回ではないのですが。

10回にしちゃREINDEXの頻度高いと思っていたのですが、実際に10回以下だったようです。

原因がライブラリにあるのか、環境(今インストールしているアドオンなど)にあるのか切り分け出来ないので何か致命的な問題が起きたら調べます。

まとめ

  • Application.events.addListener("quit", ...)で終了イベントハンドラーを登録すると2回呼ばれることがある
  • Application.events.addListener("load/ready", ...)で開始イベントハンドラーが登録されない