Sep 27, 2005

removeEventListenerに起因するコンフリクト

割と最近までMozillaには、あるイベントリスナを無効にするのにremoveEventListener()メソッドを使うと、他のイベントリスナまでも巻き添えに無効にしてしまうというバグがあった。拡張機能同士のコンフリクトの中でも最も厄介なトラブルは、これに起因するものだ。

ウィンドウの読み込み完了時のタイミングで初期化処理を行うために、addEventListener()で初期化関数をloadイベントのリスナとして登録することがよくある。イベントハンドラは一つしか登録できないのに対して、イベントリスナならいくつでも登録可能だからだ。

で、メモリの解放し忘れを防ぐために気を利かせて、この初期化専用のイベントリスナをremoveEventListener()で登録解除するようにしていると、冒頭の問題にぶち当たってしまう。ある拡張機能の初期化処理が行われたら、その次にイベントリスナとして登録されている初期化処理が行われなくなってしまう、ということが起こるのだ。Popup ALT Attributesの25日版とTab Mixとのコンフリクトは、たまたまこの二つがその順番でインストールされていたからこのような形で問題が表面化したに過ぎず、本質的には、Popup ALT AttributesにもTab Mixにも非は無い。あくまでMozillaのバグだ

こんなのまで僕の落ち度にされちゃあたまったもんじゃないですよ、なんで僕がMozillaのバグの尻拭いで説明と対応をさせられなきゃあならないんですか、ってんですよ……ブツブツ……

エントリを編集します。

wikieditish message: Ready to edit this entry.











拡張機能