Chrome extension: message from background.js to co

2019-01-19 08:06发布

问题:

I am trying to send a message from background.js to content.js using the following code:

Background

chrome.runtime.sendMessage({'method': 'test'});

Content

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
  if(message.method == 'test')
    console.log('Got message');
});

The background message is sent when background.js receives a specific message from popup.js which occurs on a click event. So the user clicks a button in the popup and a message is sent to background and then to content.

I have a feeling my problem is something to do with the fact that when the button is clicked in the popup (which is a separate tab), the content script does not receive it because it is not the current active tab.

Please help me out.

回答1:

There are 2 sendMessage functions in Chrome API.

  • chrome.runtime.sendMessage sends a message to all open extension pages (i.e. background, popup, etc.)
  • chrome.tabs.sendMessage sends a message to all content scripts from the extension in a given tab (possibly filtered by frame ID)

So, to send a message TO a content script, you need to use chrome.tabs. To send a message FROM a content script (or within the extension pages), you need to use chrome.runtime.

The event is chrome.runtime.onMessage in both cases.

See Messaging docs for more details.