0

我正在构建一个扩展,我最近遇到了一个问题。

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

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

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 将所有这些选项卡创建方法保存在一个数组中,并在连接关闭时启动所有这些方法。我对吗?如果没有,我怎么能在打开标签之间延迟?(一个接一个,如前所述)

4

1 回答 1

0

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

  chrome.tabs.create({
        url: newURL
    }, function(tab) { i++; });
于 2013-09-13T13:48:16.567 回答