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