javascript - chrome 向内容脚本广播消息

标签 javascript google-chrome google-chrome-extension

有没有办法向 chrome 扩展程序的所有内容脚本广播 chrome 消息?

chrome.runtime.sendMessage() 将 tabId 作为输入。但是,如果有多个选项卡与内容脚本一起运行,一个如何广播到所有选项卡?

最佳答案

我假设你的意思是 chrome.tabs.sendMessage 有选项卡 ID 参数。

Chrome API 中有 2 个 sendMessage 函数:

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

  • chrome.tabs.sendMessage将广播到在提供的选项卡中运行的扩展程序的所有内容脚本(很快可以按帧过滤),如果未提供 ID,则广播到当前事件的选项卡。

不幸的是,没有向所有内容脚本广播的功能。因此,您有两种可能的方法:

1 - 地毯式轰炸

只需一一广播到所有标签!

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);
  });
});

2 - 选项卡/连接跟踪

您可以更主动地跟踪准备好接收消息的选项卡。但是,维护该列表可能很乏味。

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

关于javascript - chrome 向内容脚本广播消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28825492/

相关文章:

javascript - 更改放置在模态页脚中的按钮的任务

javascript - 允许从 chrome.tabs.executeScript 注入(inject)代码访问内容脚本全局变量?

css - 动画不适用于 Chrome

google-chrome - google chrome什么时候支持1.1版本的远程调试协议(protocol)?

javascript - 在 Chrome 扩展中实现 Pusher

javascript - IE 不在具有 ONE FIELD 的表单上触发键盘事件

javascript - 在 d3 堆积面积图的工具提示中显示未选定路径的值?

google-chrome-extension - 如何检测带有 Manifest v3 的 Chrome 扩展程序是否已卸载

javascript - 显示来自 Chrome 扩展程序 "options_ui"页面的警报

javascript - 动态显示名称与字段名称