Chrome 扩展:处理多个消息监听器

Ste*_*ins 1 javascript messaging google-chrome google-chrome-extension

我的扩展已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();
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

我的内容脚本包含:

chrome.runtime.onMessage.addListener(function (msg, sender, respond) {
    if (msg["beginInject"]) {
        //do something
        respond();
    }
});
Run Code Online (Sandbox Code Playgroud)

chrome.runtime.sendMessage({ beginInject: msg.injectCss.files.length });从后台页面调用时,后台页面本身捕获消息而不是内容脚本。

问题:有没有办法将消息标记为“尚未处理”,以便其他侦听器有机会捕获并处理它?

Ste*_*ins 6

事实证明答案相当简单:

为了专门向内容脚本发送消息,请使用chrome.tabs.sendMessage(tabId, message, callback). 要在其他地方发送消息,请使用chrome.runtime.sendMessage(message, callback)