the heavenly school #4

LocationChange イベントのハンドラで、document に対して wasavi の起動と終了イベントをリスンさせているのだが、これはなかなかに乱暴だ。つまり、リスンさせっぱなしなのだ。

本来なら、タブが切り替わる直前に document からハンドラを取り除きたい。しかしそういうイベント(BeforeLocationChange みたいなの)はないようだ。LocationChange イベントは実質的に AfterLocationChanged だ。

したがってその結果、タブが切り替わるごとに同じイベントハンドラを何度も登録するというちょっと餡子の足りない動作になってしまっている。もちろん同一のイベントタイプ・ハンドラ・キャプチャフラグで何度 addEventListener を呼び出しても、登録は高々 1 度だけに収束するという DOM の仕様が前提なわけだけど。

Invoking addEventListener (or removeEventListener) repeatedly on the same EventTarget with the same values for the parameters type, listener, and useCapture has no effect. Doing so does not cause the event listener to be registered more than once and does not cause a change in the triggering order.

それと、現状では wasavi が終了すると共に [cci]passAllKeys = false;[/cci] しているのだけど、これだと wasavi に関係なく常にパススルーで動かしたいサイトで誤動作することになる。wasavi が起動する時点での passAllKeys の値を保存しておいて、wasavi 終了時はその値に復帰させるとかすればよいのだが、passAllKeys が実質グローバルなことを考えるとそれでつじつまが合うのか不安だ。いや合わないケースが確実にある。

この周辺をバグ報告されても、vimperator の仕様がそうなんだよーとおあしす運動(「おれじゃない」「あいつらじゃないの?」「しらない」「すんだこと」)を開始せざるを得ない。どうしよう。

Leave a Reply

Your email address will not be published. Required fields are marked *