Chrome Расширение - автоматическая навигация по веб-страницам - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь создать расширение 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...