将数组(对象)从popup.js传递到chrome扩展中的content.js

时间:2018-05-21 01:27:02

标签: javascript google-chrome google-chrome-extension sendmessage

我有一个在我的popup.js文件中根据用户输入创建和修改的数组,我希望能够在单击按钮时将其发送到我的content.js脚本(在popup.html中)。目前,chrome.runtime.sendMessage似乎只允许我将字符串(或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 :(得分:1)

我在关于从popup.jscontent.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));
    }
});