14

Sto cercando di rimuovere il onRequest ascoltatore aggiunto da chrome.extension.onRequest.addListener dopo una richiesta viene fatta, in questo modo:Come rimuovere listener di eventi in estensione Chrome

chrome.extension.onRequest.addListener(
    function(request){ 
     chrome.extension.onRequest.removeListener(); 
     other_function(request); 
    } 
); 

Il problema è che non so se questo funziona o no. Ho provato chrome.extension.onRequest.hasListener, che sembra non dare la risposta giusta, quindi mi chiedo se ci sono altri modi per rimuovere il listener onRequest o controllare se il listener esiste o meno.

Grazie!

risposta

28

removeListener prende una discussione. È necessario dare un nome alla funzione ascoltatore e quindi rimuoverlo per nome:

function doStuff(request){ 
    chrome.extension.onRequest.removeListener(doStuff); 
    other_function(request); 
} 
chrome.extension.onRequest.addListener(doStuff); 

Oppure, più succintamente:

chrome.extension.onRequest.addListener(
    function doStuff(request){ 
     chrome.extension.onRequest.removeListener(doStuff); 
     other_function(request); 
    } 
); 
+0

Grazie, apsillers, ma la funzione di callback ('doStuff' in questo caso) del listener di eventi deve essere anonima? – chaohuang

+0

@chaohuang: no, non è necessario che i callback siano anonimi. – Ashe

+0

@Len Questo significa che questo è diverso dai callback di 'element.addEventListener' nel DOM, come menzionato [qui] (https://developer.mozilla.org/en/DOM/element.addEventListener) (sotto il primo esempio, si dice, citazione, "Se si desidera passare parametri alla funzione listener, è necessario utilizzare una funzione anonima.")? – chaohuang

5

Un altro semplice e dritto approccio in avanti quando si utilizzano funzioni anonime:

chrome.runtime.onMessage.addListener(function(msg, sender, reply) { 
    chrome.runtime.onMessage.removeListener(arguments.callee); 
}); 
Problemi correlati