我一直在尝试将数据从我的背景页面发送到我的 chrome 扩展中的内容脚本。我似乎无法让它工作。我在网上看了几篇文章,但不是很清楚,看起来水平很高。我已经设法使用 Chrome 示例上的 Oauth 联系人示例使 oauth 正常工作。身份验证有效,我可以通过打开一个新选项卡获取数据并将其显示在 html 页面中。
我想将此数据发送到内容脚本。
我在这方面遇到了很多麻烦,如果有人可以概述您需要遵循的明确步骤,以便将数据从 bg 页面发送到内容脚本甚至更好的一些代码,我将不胜感激。有接盘侠吗?
我的背景页面的代码如下(我已经排除了 oauth 参数和其他)
` function onContacts(text, xhr) {
contacts = [];
var data = JSON.parse(text);
var realdata = data.contacts;
for (var i = 0, person; person = realdata.person[i]; i++) {
var contact = {
'name' : person['name'],
'emails' : person['email']
};
contacts.push(contact); //this array "contacts" is read by the
contacts.html page when opened in a new tab
}
chrome.tabs.create({ 'url' : 'contacts.html'}); sending data to new tab
//chrome.tabs.executeScript(null,{file: "contentscript.js"});
may be this may work?
};
function getContacts() {
oauth.authorize(function() {
console.log("on authorize");
setIcon();
var url = "http://mydataurl/";
oauth.sendSignedRequest(url, onContacts);
});
};
chrome.browserAction.onClicked.addListener(getContacts);`
由于我不太确定如何将数据放入内容脚本中,因此我不会费心发布我失败的内容脚本的多个版本。如果我能获得一个关于如何从我的内容脚本请求“联系人”数组以及如何从 bg 页面发送数据的示例,那就太好了!
最佳答案
遵循穆罕默德的观点。
如果您想在初始化时将数据从后台脚本传递到内容脚本,您可以生成另一个仅包含 JSON 的简单脚本并预先执行它。
那是你要找的吗?
否则,您将需要使用消息传递接口(interface)
在后台页面:
// Subscribe to onVisited event, so that injectSite() is called once at every pageload.
chrome.history.onVisited.addListener(injectSite);
function injectSite(data) {
// get custom configuration for this URL in the background page.
var site_conf = getSiteConfiguration(data.url);
if (site_conf)
{
chrome.tabs.executeScript({ code: 'PARAMS = ' + JSON.stringify(site_conf) + ';' });
chrome.tabs.executeScript({ file: 'site_injection.js' });
}
}
在内容脚本页面 (site_injection.js)
// read config directly from background
console.log(PARAM.whatever);
关于background - 如何从后台页面获取数据到谷歌浏览器扩展中的内容脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700254/