How to remove event listener in Chrome extension

23,747

Solution 1

removeListener takes an argument. You need to name the listener function and then remove it by name:

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

Or, more succinctly:

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

Solution 2

Another simple and straight forward approach when using anonymous functions:

chrome.runtime.onMessage.addListener(function(msg, sender, reply) {
    chrome.runtime.onMessage.removeListener(arguments.callee);
});
Share:
23,747
chaohuang
Author by

chaohuang

Updated on July 09, 2022

Comments

  • chaohuang
    chaohuang almost 2 years

    I am trying to remove the onRequest listener added by chrome.extension.onRequest.addListener after a request is made, like this:

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

    The problem is that I don't know if this works or not. I tried chrome.extension.onRequest.hasListener, which seems not to give the right answer, so I am wondering if there are some other ways to remove the onRequest listener or check if the listener exists or not.

    Thanks!