Google chrome extension 将数据数组从一个chrome扩展环境传递到另一个chrome扩展环境

Google chrome extension 将数据数组从一个chrome扩展环境传递到另一个chrome扩展环境,google-chrome-extension,google-chrome-devtools,chrome-runtime,Google Chrome Extension,Google Chrome Devtools,Chrome Runtime,我一直在尝试将字符串数组从内容脚本传递到后台环境。我知道我必须JSON.Stringify()任何数据API 我只是不能成功地做到这一点。有人能帮我们吗?我错过了什么 先谢谢你 content\u script.js chrome.extension.sendMessage({}, function(response) { //boilerplate taken from extensionizr.com var readyStateCheckInterval = setInterval(fun

我一直在尝试将字符串数组从内容脚本传递到后台环境。我知道我必须
JSON.Stringify()chrome.runtime.sendMessage()编码>任何数据API

我只是不能成功地做到这一点。有人能帮我们吗?我错过了什么

先谢谢你

content\u script.js

chrome.extension.sendMessage({}, function(response) { //boilerplate taken from extensionizr.com
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
    clearInterval(readyStateCheckInterval);


    var myArr = ["abc", "def", "ghi"];

    alert("in content_script" + myArr);

    var myJsonString = JSON.stringify(myArr);

    chrome.runtime.sendMessage(myJsonString); //send to background environment


}
}, 10);
});
chrome.runtime.onMessage.addListener( function(response, sender, sendResponse) {

//var data = JSON.parse(response); // gives token 'o' error (object already a JSON Object)
var data = response;

alert("in background.js, received " + data + " \nfrom tab: " + sender.tab.url);

//console.log(typeof youtube_links); // object ...

document.getElementById("results").innerHTML += "1: " + data[0] + "<br/> 2:" + data[1] + "<br/> 3: " + data[2] + "<br/>";



});
background.js

chrome.extension.sendMessage({}, function(response) { //boilerplate taken from extensionizr.com
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
    clearInterval(readyStateCheckInterval);


    var myArr = ["abc", "def", "ghi"];

    alert("in content_script" + myArr);

    var myJsonString = JSON.stringify(myArr);

    chrome.runtime.sendMessage(myJsonString); //send to background environment


}
}, 10);
});
chrome.runtime.onMessage.addListener( function(response, sender, sendResponse) {

//var data = JSON.parse(response); // gives token 'o' error (object already a JSON Object)
var data = response;

alert("in background.js, received " + data + " \nfrom tab: " + sender.tab.url);

//console.log(typeof youtube_links); // object ...

document.getElementById("results").innerHTML += "1: " + data[0] + "<br/> 2:" + data[1] + "<br/> 3: " + data[2] + "<br/>";



});
浏览器\u action.html

<!doctype html>

<html>
<head>

</head>
<style type="text/css">
    #mainPopup {
        padding: 10px;
        height: 200px;
        width: 400px;
        font-family: Helvetica, Ubuntu, Arial, sans-serif;
    }
    h1 {
        font-size: 2em;
    }
</style>
<body>
    <div id="mainPopup">
    <h1>Array Data received from content script:</h1>
    <div id="results">

    </div>
    </div>
</body>
</html>

#主弹出窗口{
填充:10px;
高度:200px;
宽度:400px;
字体系列:Helvetica、Ubuntu、Arial、无衬线字体;
}
h1{
字号:2em;
}
从内容脚本接收的数组数据:
我得到的只是:

这是background.js中的警报

chrome.extension.sendMessage({}, function(response) { //boilerplate taken from extensionizr.com
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
    clearInterval(readyStateCheckInterval);


    var myArr = ["abc", "def", "ghi"];

    alert("in content_script" + myArr);

    var myJsonString = JSON.stringify(myArr);

    chrome.runtime.sendMessage(myJsonString); //send to background environment


}
}, 10);
});
chrome.runtime.onMessage.addListener( function(response, sender, sendResponse) {

//var data = JSON.parse(response); // gives token 'o' error (object already a JSON Object)
var data = response;

alert("in background.js, received " + data + " \nfrom tab: " + sender.tab.url);

//console.log(typeof youtube_links); // object ...

document.getElementById("results").innerHTML += "1: " + data[0] + "<br/> 2:" + data[1] + "<br/> 3: " + data[2] + "<br/>";



});

在浏览器\u action.html中进行此操作

<!doctype html>

<html>
<head>

</head>
<style type="text/css">
    #mainPopup {
        padding: 10px;
        height: 200px;
        width: 400px;
        font-family: Helvetica, Ubuntu, Arial, sans-serif;
    }
    h1 {
        font-size: 2em;
    }
</style>
<body>
    <div id="mainPopup">
    <h1>Array Data received from content script:</h1>
    <div id="results">

    </div>
    </div>
</body>
</html>



另外,还有一件小事。
alert()由于某种原因也没有显示(控制台中也没有错误)

首先,您不需要字符串化json对象。sendMessage()方法可以获取任何有效的JSON对象作为要发送的消息

第二次,我不明白你第一次打sendMessage是怎么回事。。。我认为您必须简单地删除它,并让您的代码保持原样:

内容脚本:

var myArr = ["abc", "def", "ghi"];

alert("in content_script" + myArr);

chrome.runtime.sendMessage(myArr);
背景:

chrome.runtime.onMessage.addListener(
    function(response, sender, sendResponse)
    {
        var data = response;

        alert("in background.js, received " + data + " \nfrom tab: " + sender.tab.url);

        document.getElementById("results").innerHTML += "1: " + data[0] + "<br/> 2:" + data[1] + "<br/> 3: " + data[2] + "<br/>";
    }
);

这是一个用闭包避免声明全局变量的技巧。

Hello@Emrys Myrooin,我以前试过,现在又试过一次。这也不起作用。我使用的样板文件已经确保在运行函数之前我的页面已完全加载,因此我编写的litle内容脚本应该可以工作。它适用于meNp:-)对于下一个问题,请注意缩进;-)阅读时没有好的缩进是有点困难的。这很奇怪,我想这是由你的环境造成的。我用一个小技巧编辑了我的答案,但我认为你必须解决这个问题,因为这种类型的无限循环非常消耗资源。