Я создаю расширение chrome и получаю данные с веб-страницы (список из 20 элементов и сотен страниц) через свой внедренный скрипт.
Этот внедренный скрипт отправляет данные через chrome хранилище в фоновый скрипт.
Фоновый скрипт вычисляет массив. Затем отправляю результат в мой сценарий содержимого, где наблюдатель мутаций ожидает события, в котором он использует вычисленный массив.
Я отправляю все эти данные с помощью chrome .local.storage.set / get.
Поскольку существует так много разных спецификаций, мой наблюдатель за мутациями имеет тайм-аут в 1 секунду для каждой загруженной страницы / мутации, потому что в противном случае данные загружаются слишком медленно, и он все еще имеет данные со страницы ранее.
Есть ли более быстрый способ отправки этих данных, помимо хранилища chrome?
Внедренный. js
//Gettig Datas before as constant players
const payload = {
PlayerList: players.map(player => {
return {
ID: player.id, //resource Id
Price: player.bin // Price
};
}),
};
var payload2 = Object.values(payload);
chrome.runtime.sendMessage(extId, {type: 'GetPlayerList', data: payload2});
фон. js
chrome.runtime.onMessageExternal.addListener(
function (request, sender, sendResponse) {
if (request.type === "GetPlayerList") {
var playertest = request;
var playertest2 = playertest.data[0];
var playerbase = chrome.storage.local.get("datafut", function (data) {
playerbase = data.datafut;
var data = mergeArrays(playertest2, playerbase);
chrome.storage.local.set(
{
playerDataListCurrent: data
});
console.log(mergeArrays(playertest2, playerbase));
})
}
});
function mergeArrays(playertest2, playerbase) { //Calculate an array
by filter the IDs from a 30Element Array and a 500Element Array}
функция mergeArrays: массив
содержимое. js
var s = document.createElement('script');
s.src = chrome.extension.getURL('injected.js');
s.dataset.variable = JSON.stringify(chrome.runtime.id);
s.asnyc = false; (document.head ||
document.documentElement).appendChild(s); s.onload = function () { s.remove(); };
var observeTransferList = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
mutation.addedNodes.forEach(function (node) {
if (node.nodeType === 1 && node.matches(".has-auction-data")) {
$(node).css("height", "28");
setTimeout(() => {
var playerDataListCurrent;
chrome.storage.sync.get(function (items) {
platform = items.platform;
discountprice = items.discountprice;
average = parseInt(items.average);
percentage = parseInt(items.percentage);
if (percentage === 0) {
//Data get
chrome.storage.local.get(function (items) {
playerDataListCurrent = items.playerDataListCurrent;
for (i = 0; i < playerDataListCurrent.length; i++) {
//DO STUFF
}
})
}, 1000); // Timeout for unknown delay. Else its sometimes getting datas from array calculated before
}
});
});
});