我正在构建一个扩展,我最近遇到了一个问题。
我有一个注入网站的内容脚本,它扫描网站,并将该数据发送到我的后台页面脚本。
这是一个示例:(这是内容脚本)
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 将所有这些选项卡创建方法保存在一个数组中,并在连接关闭时启动所有这些方法。我对吗?如果没有,我怎么能在打开标签之间延迟?(一个接一个,如前所述)