我正在建立一个扩展,我已经过了问题。
我有一个内容脚本注入网站,该网站扫描网站,并将该数据发送到我的后台页面的脚本。
这是一个例子:(这是内容脚本)
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会将所有这些制表方法保存在一个数组中,并在连接关闭时启动所有这些方法。我对吗?如果没有,我怎么能在标签打开之间加一个延迟? (如前所述,一个接一个)
答案 0 :(得分:0)
chrome.tabs.create()是异步的,使用回调来处理操作完成时的某些事情。您的代码可能看起来像
chrome.tabs.create({
url: newURL
}, function(tab) { i++; });