我正在制作一个扩展,它有一个背景页面(以及与之关联的脚本:eventPage.js)和一个内容脚本(work.js)
内容脚本扫描网页,并检索数组中的数据:
var datas = new Array();
var i = 0;
$('.szovegbox_kn tbody').each(function () {
var data = $(this).first("tr").find("td:nth-child(5)").html();
if (data !== undefined) {
datas[i] = data.replace(/\s/g, '');
chrome.runtime.sendMessage({
data: datas[i]
});
i++;
}
});
如您所见,当变量 data 未定义时, data[i] 被发送到后台页面。
这是我的背景页面的脚本:
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.data !== undefined) {
var data = request.data;
var newURL = "http://www.something.com/loadpage.php?dest=" + data;
chrome.tabs.create({
url: newURL
});
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo) {
if (changeInfo.status === 'complete') {
window.setTimeout(function () {
chrome.tabs.remove(tabId);
}, 3000);
}
});
}
});
我想做的是,当一条有效消息(其类型不是未定义的)到达后台页面时,选项卡的创建会延迟 n 秒,并且只有一个选项卡会被创建,直到选项卡关闭。现在,如果在我的 datas[] 数组中有 100 条记录,我的后台页面会立即打开所有 100 个选项卡。我尝试使用 setTimout,但没有成功。
tl; dr:数据数组被发送到后台页面,一个一个打开选项卡,它们之间有十秒的延迟。
如果您需要更多信息,我可以提供