Итак, я пытаюсь сделать следующие вещи в расширении Chrome:
- из моего расширения панели, нажмите кнопку, которая запускает фоновую функцию
- обновления фоновой функциивкладка, затем отправить сообщение на контент
- контент получает сообщение, контент ждет, пока пользователь нажмет на страницу, а затем отправит фону ассоциативный массив с данными, по которым щелкнули
- фон получаетданные
Так что на данный момент все работает отлично.Но проблема в том, что мне нужно получить доступ от расширения моей панели к данным, полученным фоном.Я получаю доступ к массиву данных, делая ответ [rowStructure], но консоль отправляет мне сообщение:
Uncaught (в обещании) ReferenceError: rowStructure не определено
Это страннопотому что это фон, который информирует меня об этом сообщении, касающемся панели:
Итак, опять проблемы с Обещаниями, как у меня всегда было с самых недельных недель;)
Расширение панели:
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;
}
);