我的扩展程序在后台页面和内容脚本中都定义了chrome.runtime.onMessage.addListener()
。某些消息需要由后台页面捕获,其他消息则由内容脚本捕获。我的问题是,由于某种原因,我的一个内容脚本没有捕获消息。
我的背景页面包含:
chrome.runtime.onMessage.addListener(function (msg, sender, respond) {
if (msg["injectCss"]) {
chrome.runtime.sendMessage({ beginInject: msg.injectCss.files.length });
injectCss(sender.tab.id, msg.injectCss.files, 0, function () {
chrome.runtime.sendMessage({ endInject: true });
respond();
});
}
});
我的内容脚本包含:
chrome.runtime.onMessage.addListener(function (msg, sender, respond) {
if (msg["beginInject"]) {
//do something
respond();
}
});
当从后台页面调用chrome.runtime.sendMessage({ beginInject: msg.injectCss.files.length });
时,后台页面本身会捕获消息而不是内容脚本。
问题:有没有办法将邮件标记为“尚未处理”,以便其他听众有机会抓住并处理它?</ strong>
答案 0 :(得分:2)
原来答案很简单:
要专门向内容脚本发送消息,请使用chrome.tabs.sendMessage(tabId, message, callback)
。要在其他任何位置发送消息,请使用chrome.runtime.sendMessage(message, callback)
。