самый быстрый способ отправки данных из Injection to Content Script - PullRequest
0 голосов
/ 27 мая 2020

Я создаю расширение 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

            }
        });
    });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...