Остановить прослушиватель событий

Я сделал кнопку, которая открывает новую страницу в новой вкладке, например https://google.com. И я отправляю сообщение фоновому скрипту, чтобы он начал принимать URL-адрес новой открытой страницы. Проблема в том, что я не знаю, как остановить слушателя после получения URL. Таким образом, он продолжает выполнение даже после того, как я закрыл эту вкладку.

Popup.js

  $('#click').click(function(e)
        {
        chrome.tabs.create({url: 'https://google.com'});
        chrome.runtime.sendMessage({greeting: "googleisopened"}, function(response) {
            console.info(ok);
        });
  });

Background.js

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.greeting == "googleisopened")
    {
        chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
        alert(changeInfo.url);
        }); 
    }
  });

Возможный дубликат Как удалить прослушиватель событий в расширении Chrome

bigless 23.07.2018 22:48

Вы хотите получить URL-адрес новой вкладки один раз? или пока открыта новая вкладка? ...

War10ck 23.07.2018 23:00

Да, я хочу получить URL-адрес один раз

Nikita Lvov 23.07.2018 23:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
202
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Думаю, вам интересна эта функция http://api.jquery.com/off/

Он удаляет все события из объекта, поэтому в вашем случае вы можете просто подключить его в любом месте своего события щелчка следующим образом:

 $(this).off('click');
 // Or like this if you want to be specific
 $('#click').off('click');

Вы можете избежать удаления всех обработчиков событий, используя функциональность пространство имен.on() и .off() ...: D

War10ck 23.07.2018 22:59

Я пытался использовать его в операторе if, но безрезультатно

Nikita Lvov 23.07.2018 23:15

"подключи его куда угодно в вашем событии клика". Background.js находится в другой области и не должен влиять на содержимое всплывающего окна.

Damian Pokorski 23.07.2018 23:21

Но это не решает проблему остановки слушателя. Мне нужно остановить его в фоновом режиме после получения URL-адреса. Мне нужно использовать фоновый скрипт, потому что URL-адрес открывается в новой вкладке. Выполнение события по щелчку заканчивается отправкой сообщения фоновому скрипту.

Nikita Lvov 23.07.2018 23:32

Выкл. Убирает триггер, но ваша функция продолжит работать нормально. Я думаю, вы неправильно понимаете, как работает «выключено». Это не равно «возврату», даже если это была первая строка функции, ваша функция продолжит работать.

Damian Pokorski 24.07.2018 01:16
Ответ принят как подходящий

Спасибо всем, кто пытался мне помочь. Я сам нашел решение. Вместо использования слушателя я начал использовать tabs.getSelected для получения URL страницы только при необходимости (а не в цикле, как в onUpdated.addListener).

Итак, сценарий задний план будет следующим:

 chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.greeting === "googleisopened")
    {
        chrome.tabs.getSelected(null, function(tab) 
        {
            chrome.tabs.onUpdated.addListener(mylistener);
            function mylistener (tabId, changeInfo, tab)
            {
                alert(changeInfo.url);
                chrome.tabs.onUpdated.removeListener(mylistener);
            }
        });
    }
});  

Другие вопросы по теме