2016-04-07 18 views
0

Ich versuche Chrome Plugin-Erstellung Message Passing. Mein Code ist wie folgt:Chrome-Extension-Nachricht von Hintergrund-Skript zu Inhalt Skript funktioniert nicht

manifest.json:

{ 
    "name": "Sending Messages Test", 
    "version": "1.0", 
    "manifest_version": 2, 
    "description": "Send a Message to background.js from contentscript.js and send reply", 
    "background": { 
     "scripts": ["background.js"], 
     "persistent": false 
    }, 
    "browser_action": { 
     "default_title": "That's the tool tip", 
     "default_popup": "popup.html" 
    }, 
    // "permissions": ["tabs"], 
    "content_scripts": [{ 
     "matches": ["http://*/*", "https://*/*"], 
     "js": ["contentscript.js"] 
    }] 
} 

popup.html:

<script type="text/javascript" src="popup.js"></script> 
<div style="width:200px"> 
    <button id="button">Color all the divs</button> 
</div> 

popup.js:

window.onload = function() { 
    document.getElementById("button").onclick = function() { 
    // alert("in popup.js"); 
    chrome.extension.sendMessage({ 
     message: "coming from popup" 
    }); 
    } 
} 

contentscript.js

chrome.runtime.onMessage.addListener(function(request, sender) { 
    alert("Contentscript has received a message from from background script: '" + request.message + "'"); 
    return true; 
}); 

background.js:

var backgroundScriptMessage = " purple monkey dishwasher"; 

chrome.extension.onMessage.addListener(function(request, sender) { 
    alert("Background script has received a message from contentscript:'" + request.message + "'"); 
    returnMessage(request.message); 
}); 

function returnMessage(messageToReturn) { 
    chrome.tabs.query({active: true}, function(tabs) { 
     var joinedMessage = messageToReturn + backgroundScriptMessage; 
     alert("Background script is sending a message to contentscript:'" + joinedMessage +"'"); 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}); 
    }); 
} 

Wenn ich das Plug-in Chrome-Erweiterungen entpacken, und klicken Sie auf das erzeugte Symbol, ich sehe 2 Warnungen

  1. Hintergrund Skript eine Nachricht von contentscript erhalten hat: 'kommt von Popup'
  2. Hintergrundskript hat eine Nachricht vom Inhaltsskript erhalten: 'vom Popup kommend' lila Affe Geschirrspüler

und das dritte Popup, das im Inhaltsverzeichnis vorhanden ist, wird nie angezeigt. Ich habe versucht, nach dem Fehler zu suchen, aber kein Glück. Hat jemand eine Lösung?

+0

Haben Sie versucht, diese Zeile '//" Berechtigungen "auskommentieren: [" Tabs "],'? – rafaelcpalmeida

+0

Auch, was ist Ihre background.js Datei? – rafaelcpalmeida

+0

Ich habe versucht, '' Berechtigungen "auskommentieren: [" Tabs "],', es hat nicht funktioniert –

Antwort

0

Wenn Strom aktive Registerkarte Abfrage, vergessen Sie nicht currentWindow: true

function returnMessage(messageToReturn) { 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     var joinedMessage = messageToReturn + backgroundScriptMessage; 
      alert("Background script is sending a message to contentscript:'" + joinedMessage +"'"); 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}); 
    }); 
} 

Und bitte runtime.onMessage statt extension.onMessage verwenden, um hinzuzufügen.

BTW, können Sie auch sender.tab.id verwenden, um Sender-ID in runtime.onMessage Listener zu erhalten, dann müssen Sie nicht Abfragen Tabs Zustand.

+0

Er könnte nicht wissen, auf welche Registerkarte die Nachricht gesendet werden muss, um – rafaelcpalmeida

+0

Ich versuchte es funktioniert nicht. –

+0

@gautamscoders, Update, die Ursache sollte sein, vergessen Sie 'currentWindow'-Eigenschaft bei der Abfrage der aktuellen Registerkarte. –