Я пытаюсь создать расширение chrome, которое будет просматривать веб-сайт покупок после нажатия всплывающей кнопки, когда изначально на домашней странице веб-сайта.
У меня 2 слушателя в фоновом режиме. js. Один из них - прослушивание всплывающей кнопки, нажатой на указанном c URL, а другой - прослушивание сообщений (url), отправленных из контекста. js, и обновление вкладки.
В контексте. js, у меня есть функции, которые находят определенные c элементы, которые мне нужны, и либо отправляют сообщение в фоновый режим. js, чтобы обновить вкладку, либо нажимать кнопки. Основная - это функция asyn c, которая будет запускать все упомянутые функции.
Однако, даже с asyn c и await, все функции запускаются еще до того, как навигация будет завершена, и Я не знаю, как заставить их ждать.
Пожалуйста, дайте мне знать, если вы знаете возможное решение. Заранее благодарим.
манифест. 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"
]
}
фон. 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});
});
содержание. 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();