Chrome扩展无限循环

时间:2013-12-27 23:13:58

标签: javascript google-chrome-extension

我有一个无法理解的无限循环

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文件中删除监听器的方法,所以我知道它已经执行了至少一次?

1 个答案:

答案 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);
}