2013-08-22 8 views
8

Ich habe eine Chrome-Erweiterung, und von meinem Hintergrund Seite öffne ich ein Remote-Fenster:Wie gebe ich Daten von einem Remote-Fenster an die Hintergrundseite einer Chrome-Erweiterung zurück?

chrome.windows.create({ 
     type : 'popup', 
     url : "https://www.example.com/mypage.html" 
    }, function(newWindow) { 

    }); 

Auf meiner Remote-Seite (https://www.example.com/mypage.html) Ich habe für den Benutzer warte eine Aktion auszuführen. Wenn diese Aktion ausgeführt wird, muss ich einige Daten an die Erweiterung zurückgeben.

Wie kann ich das tun? Ich konnte nichts Relevantes in der Dokumentation finden (http://developer.chrome.com/extensions/messaging.html)

+0

Verwenden Sie [Inhaltsskripts] (https://developer.chrome.com/extensions/content_scripts.html) und [message passing] (https://developer.chrome.com/extensions/messaging.html). –

+0

@RobW thanks.Tried den "Senden von Nachrichten von Webseiten" Teil, aber ich bekomme, dass "'external_connectable' Google Chrome Dev-Kanal oder neuer erfordert, und dies ist der stabile Kanal.". Wie kann das in der Produktion funktionieren? Es ist seltsam, dass ich kein vollständiges Beispiel für diese Art von Kommunikation finden kann, wenn Sie einen haben, wäre es sehr geschätzt. – abinop

+1

http://stackoverflow.com/questions/10526995/can-a-site-invoke-a-browser-extension –

Antwort

9

Es ist grundsätzlich möglich. Sie sollten das Inhaltsskript als Brücke zwischen dem neu erstellten Fenster und Ihrem Hintergrundskript verwenden. Zum Beispiel:

Ihr Hintergrund Skript:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { 
    alert("message received"); 
}); 
chrome.windows.create({ 
    type : 'popup', 
    url : "http://yoursite.com/page.html", 
    type: "popup" 
}, function(newWindow) { 

}); 

Ihr Content-Skript:

document.addEventListener("hello", function(data) { 
    chrome.runtime.sendMessage("test"); 
}) 

seite.html:

<script> 
    var go = function() { 
     var event = document.createEvent('Event'); 
     event.initEvent('hello'); 
     document.dispatchEvent(event); 
    } 
</script> 
<a href="javascript:go();">Click me</a> 

So ist die Idee zum Versand eines Ereignis von der Seite mit Dokumentobjekt. Das Inhaltsskript überwacht dieses Ereignis und sendet nach dem Auftreten eine Nachricht an das Hintergrundskript, in dem sich der Code befindet.

0

Ich glaube, Messaging ist nicht notwendig für das, was Sie tun. (Es sei denn, ich verpasse etwas.) Ich experimentiere mit dem Erstellen einer Erweiterung und musste ein Popup erstellen, um den Benutzer nach einigen Informationen abzufragen. Zuerst verwendete ich Messaging, dann las ich die folgende Seite:

http://developer.chrome.com/extensions/event_pages.html

umfassen eine js in Ihre HTML-Seite, die verwendet entweder extension.getBackgroundPage oder runtime.getBackgroundPage [letztere verwenden, wenn Sie nicht verwenden -peristente Hintergrundseite] um zum Hintergrundskript zu gelangen. Es könnte so einfach sein, eine Funktion auf Ihrer Hintergrundseite wie folgt aufzurufen:

extension.getBackgroundPage(). SendDataOrWhateverYouCallIt (data);

Verwandte Themen