Leí algunos de los documentos de Chrome y obtuve este ejemplo básico funcionando.
Ahora quiero hacer la solicitud basada en un evento que está ocurriendo. El evento se activa y se ejecuta contentUpdateData(), pero chrome.runtime.sendMessage dentro de la función no parece funcionar. ¿Alguna idea de por qué?
/* content.js */ var data = [] chrome.runtime.onMessage.addListener( function(request, sesnder, sendResponse) { if (request.message === 'popupClicked') { contentUpdateData(); } } ) function contentUpdateData() { console.log('Code works up to here. Button clicked in popup.html, recieved in content.js. Need to get info from background.js') chrome.runtime.sendMessage({greeting: "hello"}, function(response) { console.log(response.farewell); data = response.data }); } /* background.js basic example from chrome */ chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) { console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension"); if (request.greeting === "hello") sendResponse({farewell: "goodbye", data: null}); } );Debe return true desde el detector de eventos en backgroundjs. Esto guarda sendResponse() de la recolección de basura .
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { if (request.greeting === "hello") sendResponse({ farewell: "goodbye", data: null }); // VERY IMPORTANT return true; });De alguna manera, background.js no se sincronizó correctamente después de actualizar la extensión. Esta fue la causa del error.