我有一个无法理解的无限循环
function bot(cartInfo, tab) {
function injector(file, message) {
chrome.tabs.executeScript(tab.id, {file: file, runAt: 'document_end'}, function(r) {
chrome.tabs.sendMessage(tab.id, message, function(result) {
});
});
}
//this section gets repeated over and over
chrome.tabs.onUpdated.addListener(
function myListener(tabId, changeInfo, updateTab) {
injector('addToCart.js', cartInfo.sizeInfo);
chrome.tabs.onUpdated.removeListener(myListener);
}
);
}
我想让它进入addListner部分调用一次注入器(它运行另一个文件addToCart)并返回并退出。如果我删除行chrome.tabs.onUpdated.removeListener(myListener);它可以工作但无限调用注入器功能。如果我保持线它退出循环,但不执行注射器。有办法解决这个问题吗?或者在addToCart文件中删除监听器的方法,所以我知道它已经执行了至少一次?
答案 0 :(得分:0)
我不建议在其删除的回调中使用removeListener
。我想如果你稍微重构代码,你应该能够让它工作。这使得侦听器方法更加明确,并在removeListerner
方法结束时将injector
移动到触发器。
function bot(cartInfo, tab) {
var myListener = function(tabId, changeInfo, updateTab) {
injector('addToCart.js', cartInfo.sizeInfo);
}
function injector(file, message) {
chrome.tabs.executeScript(tab.id, {file: file, runAt: 'document_end'}, function(r) {
chrome.tabs.sendMessage(tab.id, message, function(result) { });
});
chrome.tabs.onUpdated.removeListener(myListener);
}
chrome.tabs.onUpdated.addListener(myListener);
}