0

に添付リスナーを削除し、私は、ユーザーが行うには拡張子を告げるものに基づいてタブIDを異なるに同じリスナーの複数を追加します。
browser.webRequest.onBeforeRequest.addListener(mycallback, {urls: ["myurl"], tabId: varyingtabid},["blocking"]);私のWeb拡張機能ではtabId

は、しかし、私はタブのクリーンアップにリスナーを必要とするとき、私はそのリスナーを指定する方法がわからない、ドキュメントがのremoveListenerがコールバックであるパラメータを1つだけ取りますと言います。

browser.webRequest.onBeforeRequest.removeListener(mycallback); //does this remove every listener, what does this do when there are multiple listeners?

答えて

1

api_event_listeners.ccにおけるソースコード(link)によれば、のremoveListenerにかかわらず、そのリスナーを追加するために使用されるフィルタの指定されたリスナーのすべての登録を削除します。あなたが異なるフィルタ(link)で複数回、同じリスナーを追加することはできませんのでです

:、言い換えれば

 
    // Note that we only consider the listener function here, and not the 
    // filter. This implies that it's invalid to try and add the same 
    // function for multiple filters. 
    // TODO(devlin): It's always been this way, but should it be? 

あなたは同じ関数参照でのaddListenerを呼び出すたびに、それはno-opです。


注意あなたが別の関数内でコールバックを宣言した場合JS function name() {}にそれが網羅の最初の文の前に宣言されているの利便性とvar name = function() {}と同等であるため、コールバック参照が、毎回異なるものになります関数。

+0

ある関数に異なる関数参照を動的に作成し、その参照をリスナーコールバックとして使用する方法はありますか?私はリスナーを作成するときに動作しなかったオブジェクトを使用しようとしました。 – regularjoe

+0

'foo()'がグローバル/永続関数であると仮定すると、単純にラッパーを使うことができます:function(){return foo.apply(this、arguments); } – wOxxOm

関連する問題