我一直在尝试将数据从后台页面发送到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页面发送数据的示例,那将是非常不错的!
最佳答案
您有两种选择可将数据导入内容脚本:
使用Tab API:
http://code.google.com/chrome/extensions/tabs.html#method-executeScript
使用消息传递:
http://code.google.com/chrome/extensions/messaging.html
使用Tab API
当我的扩展名偶尔会被使用时,例如setting the image as my desktop wallpaper,我通常会使用这种方法。人们不会每秒钟或每分钟设置墙纸。他们通常每周一次甚至每天一次。因此,我只是将内容脚本注入该页面。这样做很容易,您可以按照文档中的说明通过文件或代码来完成:
chrome.tabs.executeScript(tab.id, {file: 'inject_this.js'}, function() {
console.log('Successfully injected script into the page');
});
使用消息传递
如果您不断需要网站中的信息,最好使用消息传递。消息传递有两种类型,即长期请求和单次请求。您的内容脚本(在manifest中定义)可以监听扩展请求:
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == 'ping')
sendResponse({ data: 'pong' });
else
sendResponse({});
});
并且您的背景页面可以通过消息传递向该内容脚本发送消息。如下所示,它将获得当前选择的选项卡,并将请求发送到该页面。
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {method: 'ping'}, function(response) {
console.log(response.data);
});
});
取决于您的扩展名使用哪种方法。我都用过。对于每秒钟都会使用的扩展,我使用消息传递(万岁)。对于将不会每次使用的扩展,那么您不必在每个页面中都使用内容脚本,则只需使用Tab API executeScript,因为它会在需要时注入内容脚本。
希望有帮助!在Stackoverflow上进行搜索,内容脚本和背景页面有很多答案。