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

时间:2017-01-02 01:29:58

标签: javascript iframe google-chrome-extension firefox-webextensions

我遇到了从后台脚本向我pageAction的脚本发送数据的问题。我的内容脚本添加了<iframe /><iframe />中的JavaScript正在从我的后台脚本接收数据,但似乎没有在pageAction中检索到。

在我的后台脚本中,我有类似的内容:

chrome.tabs.sendMessage(senderTab.tab.id, 
{
   foo:bar
}); 

其中senderTab.tab.id是我的后台脚本中onMessage侦听器中的“发件人”。

在我的内容脚本注入的<iframe />加载的JavaScript中,我有类似的内容:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
      console.log("received in iframe:", request);
    }   
});

<iframe />完全按预期接收消息。

我在page_action.js中添加了相同的JavaScript,但它没有从后台脚本接收任何数据。在调用chrome.pageAction.show(senderTab.tab.id);

之前,pageAction已使用chrome.tabs.sendMessage(senderTab.tab.id ...激活

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

收到

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

chrome.runtime.sendMessage({
  foo: bar
});  

当内容脚本发送上述消息时,pageAction JavaScript正在拾取它。

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

0 个答案:

没有答案