2013-08-22 10 views
8

Ho un estensione Chrome, e dalla mia pagina di sfondo apro una finestra remota:Come faccio a passare i dati da una finestra remota a una pagina di sfondo dell'estensione di Chrome?

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

    }); 

sulla mia pagina remota (https://www.example.com/mypage.html) sto aspettando per l'utente di eseguire un'azione. Quando viene eseguita questa azione, ho bisogno di restituire all'estensione alcuni dati.

Come posso fare questo? Non ho trovato nulla di rilevante nei documenti (http://developer.chrome.com/extensions/messaging.html)

+0

Utilizzare [script di contenuto] (https://developer.chrome.com/extensions/content_scripts.html) e [messaggio che passa] (https://developer.chrome.com/extensions/messaging.html). –

+0

@RobW ringraziamenti. Ho cercato la parte "Invio di messaggi da pagine web" ma ho capito che "'external_connectable' richiede il canale di sviluppo Google Chrome o più recente, e questo è il canale stabile." Come può funzionare in produzione? È strano che non riesca a trovare un esempio completo per questo tipo di comunicazione, se ne hai uno sarebbe molto apprezzato. – abinop

+1

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

risposta

9

Fondamentalmente possibile. Quello che dovresti fare è usare lo script di contenuto come ponte tra la finestra appena creata e lo script di sfondo. Per esempio:

Lo script di fondo:

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) { 

}); 

Lo script contenuti:

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

page.html:

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

Così, l'idea è di inviare una evento dalla pagina usando l'oggetto documento. Lo script di contenuto ascolta quell'evento e, una volta eseguita, invia un messaggio allo script di background in cui il codice è originariamente.

0

Credo che la messaggistica non sia necessaria per quello che stai facendo. (A meno che mi manchi qualcosa.) Sto sperimentando la creazione di un'estensione e ho bisogno di creare un popup per interrogare l'utente per alcune informazioni. In un primo momento ho usato la messaggistica, poi ho letto la seguente pagina:

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

Includere un JS nella pagina HTML che utilizza sia extension.getBackgroundPage o runtime.getBackgroundPage [utilizzano quest'ultimo se si sta utilizzando un non -persistent page page] per ottenere lo script di background. Potrebbe essere semplice richiamare una funzione nella tua pagina di sfondo come questa:

extension.getBackgroundPage(). SendDataOrWhateverYouCallIt (data);

Problemi correlati