Wie kann ich zwischen background.js und popup.js kommunizieren?

Ich habe eine Erweiterung mit einem Hintergrundskript:

<code>"background": {
    "scripts": ["scripts/background.js"]
  },
</code>

und ein Inhaltsskript:

<code>"content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["scripts/content_script.js"]
    }
  ],
</code>

ein Popup-Fenster(popup.html)und ein Popup-Skript(popup.js). popup.js ist nicht im Manifest registriert und behandelt popup.html Look und Listen für Benutzeraktionen, die in popup.html ausgeführt werden, z. B. das Klicken auf eine Schaltfläche.

Ich möchte eine Erweiterung machen, wasSendet eine E-Mail mit der Seite des aktuellen Registers, und dafür muss ich die Seite DOM mit dem bekommencontent_scriptübergeben Sie Daten (DOM) an diebackground script. Wenn der Benutzer danach ein Ereignis in popup.html auslöst, fängt popup.js dieses Ereignis ab, und ich möchte, dass popup.js die übergebenen Daten (DOM) aus background.js abrufen kann. Wie könnte ich das machen? Meine Frage ist also, wie kann ich zwischen background.js und popup.js kommunizieren?

Ich habe eine Antwort auf meine Frage gefunden:

Danke Elvis, ich glaube, ich habe das Problem gelöst. Ich muss nur das DOM der Site im Inhaltsskript abrufen, aber die Lösung meiner Frage lautete:

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>

Danke für die Hilfe ;)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage