I'm working on Chrome extension.
I'm listening for requests with chrome.webRequest.onCompleted.addListener
. After I catch request I want to put request.url
into impresses
in chrome.storage
chrome.webRequest.onCompleted.addListener((wr) => {
let wurl = wr.url;
if (wurl.includes('impress')) {
console.log(wr.url);
chrome.storage.local.get({impresses: []}, function (result) {
var impresses = result.impresses;
impresses.push({url: wr.url});
chrome.storage.local.set({impresses: impresses}, function () {
chrome.storage.local.get('impresses', function (result) {
console.log(result.impresses)
});
});
});
}
}, {
urls: ["<all_urls>"] },
[]);
Key impresses
from chrome.storage
has value []
on call
My problem is that console.log(wr.url);
gives me 10 results but console.log(result.impresses)
gives me only 10, sometimes less.. It should be the same.
I tried is as @wOxxOm commented but it's not working properly for me..
let queue = [];
function updateStorage() {
if (!queue.length || updateStorage.running) {
return;
}
updateStorage.running = true;
chrome.storage.local.get('impresses', data => {
data.impresses = [].concat(data.impresses || [], queue);
queue = [];
chrome.storage.local.set(data, () => {
updateStorage.running = false;
if (queue.length) updateStorage();
});
});
}
chrome.webRequest.onCompleted.addListener((wr) => {
let wurl = wr.url;
if (wurl.includes('impress')) {
console.log(wr.url);
queue.push(wr.url);
updateStorage();
}
}, {
urls: ["<all_urls>"] },
[]);