2012-05-05 20 views
14

Próbuję usunąć słuchacza onRequest dodany przez chrome.extension.onRequest.addListener po zamówienie jest wykonany, podobnie jak to:Jak usunąć detektor zdarzeń w rozszerzeniu Chrome

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

Problem polega na tym, że nie wiem, czy to działa albo nie. Próbowałem chrome.extension.onRequest.hasListener, który wydaje się nie dać właściwą odpowiedź, więc zastanawiam się, czy istnieją inne sposoby na usunięcie detektora onRequest lub sprawdź, czy słuchacz istnieje, czy nie.

Dzięki!

Odpowiedz

28

removeListener przyjmuje argument. Trzeba wymienić funkcję detektora, a następnie usunąć je według nazwy:

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

Albo, bardziej zwięźle:

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

Dzięki, apsillers, ale czy funkcja callback ('doStuff' w tym przypadku) detektora zdarzeń nie musi być anonimowa? – chaohuang

+0

@chaohuang: nie, nie ma wymogu, aby wywołania zwrotne były anonimowe. – Ashe

+0

@Len Czyli to oznacza, że ​​różni się on od wywołań zwrotnych elementu 'element.addEventListener' w DOM, jak wspomniano [tutaj] (https://developer.mozilla.org/en/DOM/element.addEventListener) (poniżej pierwszy przykład, mówi, cytuję: "Jeśli chcesz przekazać parametry do funkcji słuchacza, musisz użyć anonimowej funkcji.")? – chaohuang

5

Innym prostym i proste podejście do przodu przy użyciu anonimowych funkcje:

chrome.runtime.onMessage.addListener(function(msg, sender, reply) { 
    chrome.runtime.onMessage.removeListener(arguments.callee); 
}); 
Powiązane problemy