停止事件监听器

时间:2018-07-23 20:46:55

标签: javascript jquery google-chrome-extension

我做了一个按钮,可以在新标签页中打开新页面,例如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.log(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);
        }); 
    }
  });

2 个答案:

答案 0 :(得分:3)

我认为您对此功能http://api.jquery.com/off/感到迷惑

它会从对象中删除所有事件,因此您可以将其插入到click事件中的任何位置,如下所示:

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

答案 1 :(得分:0)

感谢所有尝试帮助我的人。我自己找到了解决方案。 我开始使用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);
            }
        });
    }
});