2012-05-05 26 views
14

Estoy tratando de eliminar el oyente onRequest añadida por chrome.extension.onRequest.addListener después se realiza una solicitud, así:¿Cómo eliminar detector de eventos en la extensión de Chrome

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

El problema es que no sé si esto funciona o no. Intenté chrome.extension.onRequest.hasListener, que parece no dar la respuesta correcta, así que me pregunto si hay otras formas de eliminar el oyente onRequest o verificar si el oyente existe o no.

Gracias!

Respuesta

28

removeListener toma un argumento. Es necesario nombrar la función de escucha y luego retirarlo por su nombre:

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

O, más sucintamente:

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

Gracias, apiladores, pero ¿no es necesario que la función de devolución de llamada ('doStuff' en este caso) del detector de eventos sea anónima? – chaohuang

+0

@chaohuang: no, no es necesario que las devoluciones de llamada sean anónimas. – Ashe

+0

@Len Esto significa que esto es diferente de las devoluciones de llamada de 'element.addEventListener' en DOM, como se menciona [aquí] (https://developer.mozilla.org/en/DOM/element.addEventListener) (debajo del primer ejemplo, dice, cita: "Si desea pasar parámetros a la función del oyente, debe usar una función anónima")? – chaohuang

5

Otro enfoque simple y directo al utilizar funciones anónimas:

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