14

Я пытаюсь удалить onRequest слушателя добавленного chrome.extension.onRequest.addListener после запроса производится, например:Как удалить прослушиватель событий в расширении Chrome

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

Проблема заключается в том, что я не знаю, если это работает или нет. Я попробовал chrome.extension.onRequest.hasListener, что, кажется, не дает правильного ответа, поэтому мне интересно, есть ли другие способы удалить слушателя onRequest или проверить, существует ли прослушиватель или нет.

Спасибо!

ответ

28

removeListener принимает аргумент. Вы должны назвать функцию слушателя, а затем удалить его по имени:

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

Или, более лаконично:

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

Спасибо, apsillers, но разве функция обратного вызова ('doStuff' в этом случае) прослушивателя событий не должна быть анонимной? – chaohuang

+0

@chaohuang: нет, для обратных вызовов нет необходимости анонимно. – Ashe

+0

@Len Значит ли это, что это отличается от обратных вызовов 'element.addEventListener' в DOM, как указано [здесь] (https://developer.mozilla.org/en/DOM/element.addEventListener) (ниже первый пример, говорится в цитате: «Если вы хотите передать параметры функции слушателя, вы должны использовать анонимную функцию».)? – chaohuang

5

Еще один простой и прямой подход при использовании анонимных функций:

chrome.runtime.onMessage.addListener(function(msg, sender, reply) { 
    chrome.runtime.onMessage.removeListener(arguments.callee); 
}); 
Смежные вопросы