#javascript #google-chrome-extension
#javascript #google-chrome-extension
Вопрос:
Мне нужно отправить обратно сообщение Chrome только после установки chrome.storage.local, но я не могу найти способ «импортировать» sendResponse
функцию внутри него.
Пожалуйста, учтите, что весь этот код выполняется в фоновом скрипте и запускается сообщением, отправленным из content_script и / или из всплывающего окна действия браузера. Вот почему мне нужно отправить ответ обратно.
У вас есть какие-либо идеи? 🤣
// Global array
let documents = [];
// Recursive ajax call
function get_and_merge_data(cursor = null, token, sendResponse) {
//console.log("Data collection started");
let url = (cursor) ? `https://[omissis]?[omissis]cursor=?{cursor}` : `[omissis]?paging_mode=standard_cursor`;
//console.log("Cursor: " cursor);
$.ajax({
headers: {
"X-AUTH-TOKEN": token
},
type: "get",
dataType: "json",
crossDomain: true,
url: url,
// dataType: "json",
success: function (response, textStatus, xhr) {
// Silence is golden...
}
}).done(function (response) {
chrome.storage.local.set({ "documents_cache": response }, function (sendResponse) {
console.log(`documents_cache has been saved`);
documents = new Array(); // Empty the array
sendResponse("documents have been loaded and saved!"); // <-- this does not work
});
//return
});
}
Ответ №1:
Подпись обратного вызова для chrome.storage.local.set
является:
function() {...};
И все же вы передаете его:
function (sendResponse) {
console.log(`documents_cache has been saved`);
documents = new Array(); // Empty the array
sendResponse("documents have been loaded and saved!"); // <-- this does not work
}
sendResponse
Переменная, определенная в приведенном выше обратном вызове, будет undefined
, и она перезапишет оригинал sendResponse
, который был первоначально объявлен здесь:
// Recursive ajax call
function get_and_merge_data(cursor = null, token, sendResponse) {
Все это, чтобы сказать, просто измените свой обратный вызов на .set
, чтобы не принимать аргументов:
function () {
console.log(`documents_cache has been saved`);
documents = new Array(); // Empty the array
sendResponse("documents have been loaded and saved!"); // <-- this does not work
}