Google chrome extension 在Chrome扩展中获得基本消息传递

Google chrome extension 在Chrome扩展中获得基本消息传递,google-chrome-extension,Google Chrome Extension,我正在尝试将基本消息传递到Chrome扩展中。关于SF,这里有很多相关的问题,尤其是:,但不幸的是,这里的建议似乎对我不起作用 Here's my manifest.json file: { "name": "Steve Screenshot", "description": "Do something", "version": "0.1", "manifest_version": 2, "content_scripts": [ { "matches" :

我正在尝试将基本消息传递到Chrome扩展中。关于SF,这里有很多相关的问题,尤其是:,但不幸的是,这里的建议似乎对我不起作用

Here's my manifest.json file:
{
  "name": "Steve Screenshot",
  "description": "Do something",
  "version": "0.1",
  "manifest_version": 2,
  "content_scripts": [
    {
      "matches" : ["*://*/*"],
      "js": ["simple.js"]
    }
  ]
}
和我的simple.js文件:

chrome.runtime.onMessage.addListener(function(request, sender, callback) {
  console.log('message received');
});

// Invoke it!!!
chrome.runtime.sendMessage({
  msg: 'whatever'
}, function(response) {
  console.log('message sent');
});
在运行时,控制台日志显示已发送的消息,但不显示已接收的消息。据我所知,我是?对吗?调用chrome.runtime.onMessage/sendMessage。有人能评论吗

谢谢,
-Steve

问题在于,您正试图使用chrome.runtime.sendMessage向内容脚本发送消息。无法使用runtime.sendMessage将消息发送到内容脚本,必须使用tabs.sendMessage。读一下

消息传递的一个很好的设置是使用后台页面作为消息的“路由器”。当需要将消息传递给内容脚本时,可以使用tabs api从后台页面进行传递。对于一个简单的测试,您可以在后台脚本中添加一个tabs.query调用,向所有内容脚本发送消息,如下所示:

chrome.tabs.query({}, function(tabs) {
  for(var i = 0; i < tabs.length; i++) {
    chrome.tabs.sendMessage(tabs[i].id, {msg: 'whatever'});
  }
}
向单个内容脚本发送消息需要一些额外的逻辑,但非常可行的一种方法是在后台页面中维护一些关联队列结构


另外,请注意,您可以从内容脚本内部使用chrome.runtime.sendMessage,但这将向扩展中不在内容脚本内部的事件侦听器发送消息。因此,您可以使用此方法向后台页面发送消息

谢谢您的建议。要使chrome.tabs可用,我需要做什么特别的事情吗?我尝试使用chrome.tabs.sendMessage,但它似乎没有定义chrome.tabs。另一个后续操作:我尝试了内容和背景脚本之间的建议拆分:manifest.json:。。。背景:{scripts:[receiver.js],persistent:true}。。。receiver.js:chrome.runtime.onMessage.addListenerfunctionrequest,发送方,回调{sessionStorage.setItemrequest,request.msg;};simple.js:sessionStorage.setItem'request';chrome.runtime.sendMessage{msg:'whatever'},functionresponse{console.logsessionStorage.getItem'request';};看起来没有调用侦听器;getItem返回未定义的。要使选项卡正常工作,您需要将选项卡添加到清单的“权限”部分。请阅读顶部附近的内容。回复:您的第二篇文章-请记住sendMessage不会将消息发送到内容脚本,因此在您的背景页面中,您必须使用tabs.sendMessage。尝试调整权限,看看初始示例是否有效。也阅读了我链接的页面,文档非常好。我确实在权限中添加了选项卡,但仍然得到了未捕获的引用错误:选项卡未定义错误尝试了chrome.tabs.sendMessage和tabs.sendMessage。您确定我不需要做任何其他事情来使选项卡界面可用吗?尽管看这里,但听起来内容脚本中似乎没有选项卡。后续:我已使用警报确认确实调用了我的背景脚本。但是,内容脚本和后台脚本之间似乎没有共享/传播会话存储。你知道它是否应该被分享吗?