Como posso me comunicar entre o background.js e o popup.js?
Eu tenho uma extensão, com um script de plano de fundo:
<code>"background": { "scripts": ["scripts/background.js"] }, </code>
e um script de conteúdo:
<code>"content_scripts": [ { "matches": ["*://*/*"], "js": ["scripts/content_script.js"] } ], </code>
uma janela pop-up(popup.html)
e um script pop-up(popup.js)
. O popup.js não é registrado no manifesto, e lida com popup.html look e escuta as ações do usuário feitas no popup.html, como clicar em um botão.
Eu quero fazer uma extensão, o queenvia e-mails para a página da guia atual, e para isso, eu preciso pegar a página DOM com ocontent_script
, passar dados (DOM) para obackground script
. Depois disso, quando o usuário disparar um evento em popup.html, o popup.js captura esse evento e deseja que o popup.js seja capaz de obter os dados passados (DOM) de background.js. Como eu poderia fazer isso? Então, minha pergunta é: como eu poderia me comunicar entre o background.js e o popup.js?
Eu encontrei uma resposta para minha própria pergunta:
Obrigado Elvis, acho que resolvi o problema; Eu só preciso obter o DOM do site no script de conteúdo, mas a solução da minha pergunta foi esta:
content_script.js
<code> // SEND DOM structure to the background page chrome.extension.sendRequest({dom: "page DOM here"}); </code>
background.html
<code><html> <head> <script> chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { if(request.dom != "") var theDOM = request.dom; console.log(request.dom); // page DOM here -> works chrome.extension.sendRequest({theDOM: theDOM}); // theDOM : "page DOM here" }); </script> </head> <body> </body> </html> </code>
popup.js
<code>var dom; chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { if(request.theDOM != ""){ console.log("popup request: "+request.theDOM); dom = request.theDOM; } }); // HANDLE TAB_1 REQUESTS (EMAIL PAGE) // --------------------------------- $("#send").click(function(){ console.log(dom); // page DOM here } </code>
Obrigado pela ajuda ;)