0

我的扩展程序在背景页面和内容脚本中都定义了chrome.runtime.onMessage.addListener()。一些消息需要被背景页面捕获,其他消息需要被内容脚本捕获。我的问题是,由于某种原因,我的一个内容脚本不能捕获消息。Chrome扩展程序:处理多个消息侦听器

我的背景页面包含:

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 });会从后台页面调用,后台页面本身捕捉消息,而不是内容脚本。

问:有没有办法将邮件标记为“尚未处理”,以便其他听众可以有机会捕捉并处理它?

回答

2

原来答案是很简单:

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