как отключить onCreated event listener в расширении Chrome?

#javascript #google-chrome-extension

#javascript #google-chrome-extension

Вопрос:

У меня есть простое расширение Chrome, которое автоматически закрывает новые вкладки. Цель состоит в том, чтобы расширение включалось / выключалось нажатием на значок браузера. Я могу активировать его, однако я не могу отключить его. Вот что у меня есть на данный момент:

 var enable=false;
chrome.browserAction.onClicked.addListener(function (tab) {
  enable = enable ? false : true;
  if(enable){
    chrome.tabs.onCreated.addListener(function (tab) {
      chrome.tabs.remove(tab.id);
    });
    chrome.browserAction.setIcon({path: 'on.png'});
  }
  else{
    chrome.browserAction.setIcon({path: 'icon.png'});
    // I'm not sure what to put here
  }
});
  

У меня есть 2 разных изображения для представления состояния включения / выключения, которое работает нормально, однако прослушиватель остается активным. Я пробовал removeListener безрезультатно. Любая помощь была бы высоко оценена!

Ответ №1:

Вы должны использовать именованную функцию, чтобы использовать removeListener :

 function myListener(tab){
    chrome.tabs.remove(tab.id);
}

var enable=false;
chrome.browserAction.onClicked.addListener(function (tab) {
  enable = !enable;
  if(enable){
    chrome.tabs.onCreated.addListener(myListener);
    chrome.browserAction.setIcon({path: 'on.png'});
  }
  else{
    chrome.browserAction.setIcon({path: 'icon.png'});
    chrome.tabs.onCreated.removeListener(myListener);
  }
});