谷歌chrome api如何处理标签创建?

时间:2013-09-11 21:36:50

标签: javascript google-chrome google-chrome-extension

我正在建立一个扩展,我已经过了问题。

我有一个内容脚本注入网站,该网站扫描网站,并将该数据发送到我的后台页面的脚本。

这是一个例子:(这是内容脚本)

var i = 0;
var cegszamok = new Array();
$('.szovegbox_kn tbody').each(function () {
    var $cegszam = $(this).first("tr").find("td:nth-child(5)").html();
    if ($cegszam !== undefined) {
        cegszamok[i] = $cegszam.replace(/\s/g, '');
        var port = chrome.runtime.connect({
            name: "jon"
        });
        port.postMessage({
            cegszam: cegszamok[i]
        });
        i++;
    }
});

这是接收端的代码:

var szamok = new Array();
var i = 0;

chrome.runtime.onConnect.addListener(function (port) {
    console.assert(port.name == "jon");
    port.onMessage.addListener(function (msg) {
        szamok[i] = msg.cegszam;
        var newURL = "http://www.website.hu/loadpage.php?id=" + szamok[i];
        chrome.tabs.create({
            url: newURL
        });
        i++;
    });
});

我想要实现的是,如果内容脚本的数组有(比方说)100行,那么选项卡是逐个打开的,关闭选项卡,等待几秒钟,然后打开下一个一等等。

然而,在我看来,只有在连接关闭后,chrome.tabs.create()才会在每次消息进入时执行,并且同时打开所有选项卡。我尝试使用alarm()setTimeout()甚至_.throttle()设置延迟。

如果我是对的,那么我想,google chrome api会将所有这些制表方法保存在一个数组中,并在连接关闭时启动所有这些方法。我对吗?如果没有,我怎么能在标签打开之间加一个延迟? (如前所述,一个接一个)

1 个答案:

答案 0 :(得分:0)

chrome.tabs.create()是异步的,使用回调来处理操作完成时的某些事情。您的代码可能看起来像

  chrome.tabs.create({
        url: newURL
    }, function(tab) { i++; });