Передача массива (объектов) из popup.js в content.js в расширении chrome - PullRequest
0 голосов
/ 21 мая 2018

У меня есть массив, который создается и изменяется при вводе пользователем в моем файле popup.js, и я хочу иметь возможность отправлять его в мой скрипт content.js по нажатию кнопки (в popup.html).В настоящее время chrome.runtime.sendMessage, кажется, позволяет мне только передавать сообщения типа string (или JSON?) В content.js, поэтому мне трудно найти решение для получения этого массива объектов, а также сообщения (что-токак 'start_search') для выполнения на content.js.

Для справки приведен массив объектов:

var searchList = [];

Вот функция, которая его создает (запускается при отправке пользователем):

function addWord(userWord, userColor){ //append new word 
    var wordAndColorPair = {
        word: userWord,
        color: userColor,
        id: placementId.toString() //keep it as a string so it can be used for highlighted word's class
    }
    searchList.push(wordAndColorPair); //pushing the new object with user inputs to array
}

Ниже приведена моя попытка использования JSON.stringify:

popup.js:
    .
    .
    var jsonSearchList = JSON.stringify(searchList);
    chrome.tabs.sendMessage(activeTab.id, jsonSearchList);


content.js:
    alert(request.message); //alerts "undefined"....

1 Ответ

0 голосов
/ 21 мая 2018

Пример того, что я сказал в комментариях относительно отправки сообщения с popup.js на content.js:

Popup.html:

<body>
    <button id="test">Send data</button>
</body>
<script type="text/javascript" src="popup.js"></script>

Popup.js:

var searchList=[{test1:1},{test2:2}];
var jsonSearchList = JSON.stringify(searchList);

document.getElementById("test").addEventListener("click", function() {
    chrome.tabs.query({
        active: true,
        currentWindow: true
    }, function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {
            data: jsonSearchList
        });
    });
});

Content.js:

chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
    if (msg.data !== undefined) {
        console.log(JSON.parse(msg.data));
    }
});
...