Javascript chrome广播消息到内容脚本

Javascript chrome广播消息到内容脚本,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,有没有一种方法可以向chrome扩展的所有内容脚本广播chrome消息 chrome.runtime.sendMessage()接受一个tabId作为输入。但是,如果有多个选项卡使用内容脚本运行,那么如何向所有选项卡广播 我猜您的意思是chrome.tabs.sendMessage具有tab ID参数 Chrome API中有2个sendMessage函数: 将广播到运行在chrome中的所有页面-extension://your-extension-id/origin 这将是背景页面、弹出窗

有没有一种方法可以向chrome扩展的所有内容脚本广播chrome消息


chrome.runtime.sendMessage()接受一个tabId作为输入。但是,如果有多个选项卡使用内容脚本运行,那么如何向所有选项卡广播

我猜您的意思是
chrome.tabs.sendMessage
具有tab ID参数

Chrome API中有2个
sendMessage
函数:

  • 将广播到运行在
    chrome中的所有页面-extension://your-extension-id/
    origin

    这将是背景页面、弹出窗口(如果打开)、选项页面(如果打开)以及您自己打开的扩展页面的任何选项卡

  • 将广播到在提供的选项卡中运行的扩展的所有内容脚本(很快可以按帧进行筛选),如果未提供ID,则广播到当前活动选项卡
不幸的是,没有向所有内容脚本广播的功能。因此,您有两种可能的方法:

地毯式轰炸 只需一个接一个地向所有选项卡广播

chrome.tabs.query({}, function(tabs) {
  tabs.forEach(function(tab) {
    chrome.tabs.sendMessage(tab.id, message);
  });
});
如果要按匹配模式缩小范围,可以:

// Even accepts arrays of patterns!
chrome.tabs.query({url: "*://*.example.com/*"}, function(tabs) {
  tabs.forEach(function(tab) {
    chrome.tabs.sendMessage(tab.id, message);
  });
});
选项卡/连接跟踪 您可以更主动地跟踪准备接收您的邮件的选项卡。然而,维护这个列表可能会很乏味

实际上,您可以让内容脚本打开到后台页面的端口连接,然后使用打开的端口列表向它们发送命令。不利的一面是,您不能使用事件页面进行此操作,因为它需要保持连接打开