Chrome扩展程序:处理多个邮件侦听器

时间:2014-01-21 14:48:58

标签: javascript google-chrome google-chrome-extension messaging

我的扩展程序在后台页面和内容脚本中都定义了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>

1 个答案:

答案 0 :(得分:2)

原来答案很简单:

要专门向内容脚本发送消息,请使用chrome.tabs.sendMessage(tabId, message, callback)。要在其他任何位置发送消息,请使用chrome.runtime.sendMessage(message, callback)