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:-)对于下一个问题,请注意缩进;-)阅读时没有好的缩进是有点困难的。这很奇怪,我想这是由你的环境造成的。我用一个小技巧编辑了我的答案,但我认为你必须解决这个问题,因为这种类型的无限循环非常消耗资源。