Javascript 在后台上下文中的脚本之间进行通信(后台脚本、浏览器操作、页面操作、选项页面等)

Javascript 在后台上下文中的脚本之间进行通信(后台脚本、浏览器操作、页面操作、选项页面等),javascript,iframe,google-chrome-extension,firefox-addon-webextensions,Javascript,Iframe,Google Chrome Extension,Firefox Addon Webextensions,我在将数据从后台脚本发送到我的pageAction脚本时遇到问题。我的内容脚本添加了一个,并且中的JavaScript正在从我的后台脚本接收数据,但它似乎没有在我的页面操作中检索到 在我的背景脚本中,我有如下内容: chrome.tabs.sendMessage(senderTab.tab.id, { foo:bar }); chrome.runtime.onMessage.addListener( function(request, sender, sendResponse)

我在将数据从后台脚本发送到我的
pageAction
脚本时遇到问题。我的内容脚本添加了一个
,并且
中的JavaScript正在从我的后台脚本接收数据,但它似乎没有在我的
页面操作中检索到

在我的背景脚本中,我有如下内容:

chrome.tabs.sendMessage(senderTab.tab.id, 
{
   foo:bar
}); 
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
      console.log("received in iframe:", request);
    }   
});
其中
senderTab.tab.id
是我的后台脚本中
onMessage
侦听器中的“发送者”

在我的内容脚本注入的
加载的JavaScript中,我有如下内容:

chrome.tabs.sendMessage(senderTab.tab.id, 
{
   foo:bar
}); 
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
      console.log("received in iframe:", request);
    }   
});
完全按照预期接收消息

我在我的
页面_action.js
中放入了相同的JavaScript,但它没有从后台脚本接收任何数据。pageAction通过chrome.pageAction.show(senderTab.tab.id)激活在我调用chrome.tabs.sendMessage(senderTab.tab.id…

附加到我的pageAction的HTML页面不是同一选项卡的一部分吗?因为这个
tabId
使我能够激活/显示”图标,我认为pageAction的JavaScript中的侦听器也应该从
chrome.tabs.sendMessage(senderTab.tab.id…


在我的内容脚本中,我使用以下命令将数据发送到后台脚本:

chrome.runtime.sendMessage({
  foo: bar
});  
当内容脚本发送上述消息时,pageAction JavaScript将接收该消息


如何让后台脚本正确地将数据发送到我的pageAction?我不希望有pageAction请求/轮询,而是希望pageAction只是侦听和接收。例如,如果显示的pageAction HTML,它应该能够随着后台页面的更改而实时更新。

与后台内容中的页面通信xt 在后台上下文中打开的页面包括:

  • ()
  • (Firefox不支持事件页面。所有manifest.json页面。)
  • ()
  • ()
  • (,)(在弹出窗口、选项卡或窗口中)
  • (镀铬版不提供)
  • 扩展名中包含的任何HTML内容,即,或frame.1
使用()不会向其中任何人发送消息。您需要使用()向他们发送消息。除背景页和事件页外,任何一个的作用域仅在显示时存在。显然,当代码不存在时,您无法与代码通信。当作用域存在时,您可以使用以下方式与其中任何一个进行通信: