我正在尝试创建一个Chrome扩展程序,该扩展程序最初在网站首页上单击弹出按钮后便会浏览整个购物网站。
background.js中有2个侦听器。一种是监听在特定URL上单击的弹出按钮,另一种是监听从context.js发送的消息(URL)并更新选项卡。
在context.js中,我具有一些函数,这些函数可以查找所需的特定元素,然后将消息发送到background.js以更新选项卡或单击按钮。主要是一个异步函数,它将运行所有提到的函数。
但是,即使使用async和await功能,所有功能都在导航完成之前运行,我不确定如何使它们等待。
如果您知道可能的解决方法,请告诉我。 预先感谢。
manifest.json
{
"manifest_version": 2,
"name": "1-Click-Browser",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"browser_action": {
"default_icon": "icon.png",
"default_title": "1-Click-Browser"
},
"permissions": [
"activeTab",
"storage",
"declarativeContent",
"tabs"
]
}
background.js
chrome.browserAction.onClicked.addListener(buttonClicked);
function buttonClicked(tab) {
if (tab.url === *homepage url*) {
chrome.tabs.executeScript(null, {file: './content.js'}, () => {
console.log('context executed');
});
}
}
chrome.runtime.onMessage.addListener((request, sender) => {
chrome.tabs.update(sender.tab.id, {url: request.redirect});
});
content.js
async function pickCategory() {
var redirect = *nextlink*;
chrome.runtime.sendMessage({redirect: redirect});
return Promise.resolve();
}
async function pickItem() {
var items = document.getElementsByClassName('name-link');
var items_with_product_name = [];
for (var i = 0; i < items.length; ++i) {
if (items[i].innerHTML.includes(item_name)) {
items_with_product_name.push(items[i]);
}
}
for (var i = 0; i < items.length; ++i) {
if (items[i].innerHTML.includes(color)) {
for (var j = 0; j < items_with_product_name.length; ++j) {
if (items_with_product_name[j].href === items[i].href) {
chrome.runtime.sendMessage({redirect: items[i].href});
return Promise.resolve();
}
}
}
};
}
async function add_to_cart() {
document.getElementsByName('commit')[0].click();
chrome.runtime.sendMessage({redirect: *nextlink*});
return Promise.resolve();
}
function checkout() {
// code
}
async function main() {
await pickCategory();
await pickItem();
await add_to_cart();
await checkout();
}
main();