Kev*_*ang 4 javascript google-chrome google-chrome-extension
有没有办法将chrome消息广播到chrome扩展的所有内容脚本?
chrome.runtime.sendMessage()将tabId作为输入.但是,如果有多个选项卡与内容脚本一起运行,那么如何向所有选项卡广播?
我假设您的意思是chrome.tabs.sendMessage使用标签ID参数.
sendMessageChrome API中有两个功能:
chrome.runtime.sendMessage将广播到chrome-extension://your-extension-id/原始运行的所有页面.
那将是后台页面,弹出窗口(如果打开),选项页面(如果打开)以及您自己打开的扩展页面的任何选项卡.
chrome.tabs.sendMessage 将广播到所提供的选项卡中运行的扩展的所有内容脚本(很快可能按帧过滤),或者如果未提供ID,则播放当前活动选项卡.遗憾的是,没有功能可以向所有内容脚本广播.所以,你有两种可能的方法:
只需逐个播放所有标签!
chrome.tabs.query({}, function(tabs) {
tabs.forEach(function(tab) {
chrome.tabs.sendMessage(tab.id, message);
});
});
Run Code Online (Sandbox Code Playgroud)
如果您想通过匹配模式缩小范围,您可以:
// Even accepts arrays of patterns!
chrome.tabs.query({url: "*://*.example.com/*"}, function(tabs) {
tabs.forEach(function(tab) {
chrome.tabs.sendMessage(tab.id, message);
});
});
Run Code Online (Sandbox Code Playgroud)
您可以更加主动,并跟踪准备接收邮件的标签.但是,维护该列表可能会很乏味.
实际上,您可以改为使内容脚本打开到后台页面的端口连接,然后使用打开端口列表向它们发送命令.缺点是您无法使用事件页面,因为它需要保持连接打开.
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |