Jak mogę się komunikować między background.js a popup.js?
Mam rozszerzenie z skryptem w tle:
<code>"background": { "scripts": ["scripts/background.js"] }, </code>
i skrypt treści:
<code>"content_scripts": [ { "matches": ["*://*/*"], "js": ["scripts/content_script.js"] } ], </code>
wyskakujące okno(popup.html)
i skrypt wyskakujący(popup.js)
. popup.js nie jest rejestrowany w manifeście i zajmuje się wyglądem popup.html oraz nasłuchiwaniem działań użytkownika w popup.html, takich jak kliknięcie przycisku.
Chcę zrobić rozszerzeniee-maile na stronie bieżącej kartyi do tego potrzebuję strony DOM zcontent_script
, przekazuj dane (DOM) dobackground script
. Po tym, gdy użytkownik wywoła zdarzenie w popup.html, popup.js przechwyci to zdarzenie i chcę, aby popup.js mógł pobrać przekazane dane (DOM) z background.js. Jak mogłem to zrobić? Więc moje pytanie brzmi: jak mogę komunikować się między background.js i popup.js?
Znalazłem odpowiedź na moje własne pytanie:
Dzięki Elvis, myślę, że rozwiązałem problem; Muszę tylko uzyskać DOM strony w skrypcie treści, ale moim pytaniem było rozwiązanie:
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>
Dzięki za pomoc ;)