Доступ к данным из расширения после асинхронного обмена сообщениями между фоном и контентом - PullRequest
0 голосов
/ 31 января 2019

Итак, я пытаюсь сделать следующие вещи в расширении Chrome:

  • из моего расширения панели, нажмите кнопку, которая запускает фоновую функцию
  • обновления фоновой функциивкладка, затем отправить сообщение на контент
  • контент получает сообщение, контент ждет, пока пользователь нажмет на страницу, а затем отправит фону ассоциативный массив с данными, по которым щелкнули
  • фон получаетданные

Так что на данный момент все работает отлично.Но проблема в том, что мне нужно получить доступ от расширения моей панели к данным, полученным фоном.Я получаю доступ к массиву данных, делая ответ [rowStructure], но консоль отправляет мне сообщение:

Uncaught (в обещании) ReferenceError: rowStructure не определено

Это страннопотому что это фон, который информирует меня об этом сообщении, касающемся панели:

enter image description here Итак, опять проблемы с Обещаниями, как у меня всегда было с самых недельных недель;)

Расширение панели:

selectElementsButton.addEventListener("click", function (event) {
    background.updateTab(originalTabId, originalTabUrl)
        .then(function (response) {
            console.log("originalTab update : " + response);
            if (response === 'complete') {
                var dataArray = {"rows" : level.rows, "rowId" : rowId};
                return background.sendMessageToTab(originalTabId, "selectContent", dataArray);                    
            }
        })
        .then(function (response2) {
            console.log("response2 :");
            // **NO PROBLEM HERE :**
            console.log(response2);
            // **BUT PROBLEM HERE :**
            console.log("rowStructure : " + response2[rowStructure]);
        });
    event.preventDefault();
});

Фон:

function updateTab(tabId, url) {
    return new Promise(function (resolve, reject) {
        chrome.windows.update(originalWindowId, {
            focused: true
        });
        chrome.tabs.update(tabId, {
            "active": true,
            url: url
        }, function (tab) {
            console.log("tab with id " + tab.id + " updated");
            chrome.tabs.onUpdated.addListener(function tabUpdatedListener(tabId, changeInfo, tab) {
                if (changeInfo.status === 'complete') {
                    resolve('complete');
                    chrome.tabs.onUpdated.removeListener(tabUpdatedListener);
                }
            });
        });
    });
}

function sendMessageToTab(tabId, action, dataArray) {
    return new Promise(function (resolve, reject) {
        chrome.tabs.sendMessage(tabId, {
            action: action,
            dataArray: dataArray
        }, function (response) {
            if (response.response === 'ok') {
                console.log("response : ");
                console.log(response.responseData);
                resolve(response.responseData);
            } else 
                reject('failed');
        });
    });
}

Содержимое:

chrome.runtime.onMessage.addListener(
    function (message, sender, sendResponse) {
        console.log("message from bg : " + message.action + " with data :");
        console.log(message.dataArray);
        switch (message.action) {
            case "selectContent":
                alert("Sélectionnez les lignes à récupérer");
                selectRows(message.dataArray["rows"], message.dataArray["rowId"])
                .then(function (response) {
                    console.log("response : ");
                    console.log(response);
                    sendResponse({
                        response: "ok",
                        responseData: response
                    });
                });
                break;
        }
        // asynchronous response
        return true;
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...