猿问

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

我遇到了将数据从后台脚本发送到我的脚本的问题pageAction。我的内容脚本添加了一个,<iframe />并且中的JavaScript <iframe />正在从我的后台脚本接收数据,但是似乎未在中检索到它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 />完全按预期接收该消息。


我将相同的JavaScript放入了page_action.js,但是它没有从后台脚本接收任何数据。chrome.pageAction.show(senderTab.tab.id);在我致电之前激活pageActionchrome.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,它应该能够在后台页面进行更改时实时更新。


繁星点点滴滴
浏览 701回答 3
3回答

梵蒂冈之花

一次只能打开一个&nbsp;pageAction弹出窗口:为当前窗口的活动选项卡定义了一个弹出窗口,并由用户单击页面操作按钮来打开。通过使用chrome.pageAction.setPopup()并指定,可以为不同的标签分配不同的HTML文档tabId。但是,使用的任何通信方法都只能与当前打开的通信,而不能与多个通信。从您的评论看来,您似乎在谈论的不是实际pageAction弹出窗口。请更详细地描述。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答