0

Dans mon extension Web, j'ajoute plusieurs des mêmes écouteurs aux différents identifiants d'onglets en fonction de ce que l'utilisateur dit à l'extension de faire.
browser.webRequest.onBeforeRequest.addListener(mycallback, {urls: ["myurl"], tabId: varyingtabid},["blocking"]);webRequest supprimer un écouteur attaché à un tabId

Mais quand je dois nettoyer un écouteur pour un onglet, je ne sais pas comment spécifier quel auditeur, la documentation dit removeListener ne prend qu'un seul paramètre qui est le rappel.
browser.webRequest.onBeforeRequest.removeListener(mycallback); //does this remove every listener, what does this do when there are multiple listeners?

Répondre

1

Selon le code source dans api_event_listeners.cc (link), tous les enregistrements removeListener supprime pour l'auditeur spécifié quels que soient les filtres utilisés pour ajouter cet auditeur.

C'est parce que vous ne pouvez pas ajouter le même auditeur plusieurs fois avec différents filtres (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? 

En d'autres termes, chaque fois que vous invoquez addListener avec la référence même fonction , il est un no-op .


Notez que si vous déclarez le rappel dans une autre fonction, la référence de rappel sera différent à chaque fois, parce que dans JS function name() {} est équivalent à var name = function() {} avec la commodité de celui-ci étant déclaré avant la première déclaration du englobante fonction.

+0

Est-il possible de créer dynamiquement différentes références de fonction à une fonction et d'utiliser cette référence comme rappel de l'écouteur? J'ai essayé d'utiliser un objet qui ne fonctionnait pas lors de la création de l'écouteur. – regularjoe

+0

En supposant que 'foo()' est une fonction globale/persistante, vous pouvez simplement utiliser un wrapper: function() {return foo.apply (this, arguments); } – wOxxOm