首先,对不起,我不知道如何更好地标题。
我正在制作Google Chrome扩展程序,其目的是从页面A 上的表格中读取表格列。这发生在我的 inject.js :
中var $tableRows = $("table tbody tr");
var offers = [];
var links = [];
$tableRows.each(function (index) {
offers.push({
code: $.trim($(this).find('td:nth-child(2)').text()),
city: $.trim($(this).find('td:nth-child(6)').text()),
state: $.trim($(this).find('td:nth-child(7)').text())
});
links.push($(this).find('td:first').find('a').attr('href'));
if (index == $campaignTableRows.length - 1) {
downloadPdfForOffers(offers, links);
}
});
上面的代码创建了一个数组,其中包含表格中的信息,并保存每个商品资料的链接。
然后函数downloadPdfForOffers
执行以下操作:
var downloadPdfForOffers = function (offers, links) {
chrome.storage.local.set({"offers": offers}, function () {
chrome.runtime.sendMessage({
downloadUrlsReady: true,
data: {links: links}
});
});
};
它在本地存储中设置我对这些优惠的当前信息,并将链接发送到background.js
。
然后从background.js
,我在新标签中打开这些链接。
if (request.downloadUrlsReady) {
for (var i = 0; i < request.data.links.length; i++) {
chrome.tabs.create({url: request.data.links[i], active: true});
}
}
在我的inject.js
我等待页面加载优惠配置文件并使用jQuery获取我需要的其他信息,然后再将其发送到background.js
:
chrome.storage.local.get(["job_offers"], function (items) {
if (items.job_offers && items.job_offers.length > 0) {
var requirements = $("#j_id0\\:SiteTemplate\\:j_id747\\:j_id748").find('.margin-b3:first div.tcell:nth-child(2) div');
var data = {
file: {
link: $('.btn.btn-link.btn-lg.vs2.margin-r2').attr('href'),
name: $.trim($('#j_id0\\:SiteTemplate\\:j_id747\\:j_id767').text())
},
job_offer: {
position: requirements.text()
}
};
chrome.runtime.sendMessage({
pdfUrlReady: true,
data: data
});
}
});
然后在我的background.js
我更新已设置的优惠并下载pdf:
if (request.pdfUrlReady) {
console.log(request.data);
chrome.storage.local.get(["job_offers"], function (items) {
items.job_offers.forEach(function (job_offer, index) {
if (job_offer.code == request.data.file.name) {
items.job_offers[index] = $.extend(job_offer, request.data.job_offer);
chrome.storage.local.set(items, function () {
chrome.downloads.download({
url: request.data.file.link,
saveAs: false,
filename: request.data.file.name + '.pdf'
}, function () {
chrome.tabs.remove(sender.tab.id);
});
});
}
});
});
}
console.log
总是有我从单个页面传递的完整信息,但是当我更新chrome.storage.local
时,有时我得不到有关该优惠的完整信息,可能是因为它&#39 ; s异步。
我该如何处理这种情况?