Sebi
Sebi

Reputation: 4532

Chrome extension messages not getting through

manifest.json:

{
  "manifest_version": 2,
  "name": "chrome-extension-bar",
  "description": "Chrome Extension Bar",
  "version": "1.0",

  "browser_action": {
    "default_title": "Chrome Extension Bar",
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  
  "background": {
    "service_worker": "background.js"
  },
  
  "permissions": [
    "<all_urls>",
    "tabs"
  ],

  "content_security_policy": "script-src 'self' https://ajax.googleapis.com/ https://maxcdn.bootstrapcdn.com ; object-src 'self'"
}

background.js:

console.log("In background.js")
chrome.runtime.onMessage.addListener (
    function (request, sender, sendResponse) {
        console.log("In listener");
        // to send back your response  to the current tab
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, {fileData: response}, function(response) {
                sendResponse({farewell: "goodbye"});
            });
        });

        return true;
    }
);

content_script.js:

var current_title_bar = document.getElementById("global-nav");
console.log("Title bar:" + current_title_bar);
current_title_bar.appendChild(extension_bar); // <= GODD, getting here

document.getElementById("idStartButton").addEventListener('click', function () {
    console.log('Sending start button message: ' + document.getElementById("idNumSecondsPerPage").value);
    chrome.runtime.sendMessage({numSecondsPerPage : document.getElementById("idNumSecondsPerPage").value}, function(response) {
        console.log('Got response: ' + response.farewell);
      });
});

document.getElementById("idStopButton").addEventListener('click', function () {
    console.log('Sending stop button message: ' + document.getElementById("idNumPages").value);
    chrome.runtime.sendMessage({numPages : document.getElementById("idNumPages").value}, function(response) {
        console.log('Got response: ' + response.farewell);
      });
});

The messages seem to be getting sent, but there's I'm not getting anything back from the receiver.

Console log on the page into which the form was injected:

Entering content_script.js
content_script.js:156 Title bar:[object HTMLElement]
content_script:161 Sending start button message: 67
content_script:168 Sending stop button message: 76

Why aren't the messages sent by background.js received by content_script.js? Are they even sent?

Upvotes: 0

Views: 41

Answers (1)

Facundo Garbino
Facundo Garbino

Reputation: 11

If you want to send a message from the background.js script to the content_script.js then you need to set an onMessage listener on the content script.

What you might do in this case is, after receiving the event on the background script, just call the callback function, instead you're sending a new event with a callback function than when it is executed, calls the callback function of the first event.

Instead of doing this:

console.log("In listener");
// to send back your response  to the current tab
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {fileData: response}, function(response) {
        sendResponse({farewell: "goodbye"});
    });
});

just do this

console.log("In listener");
// send back your response
sendResponse({farewell: "goodbye"});
        

Upvotes: 1

Related Questions