2016-05-13 10 views
0

Ich habe eine Chrome-Erweiterung, an der ich gerade arbeite. Mein background.js-Skript führt etwas aus und gibt eine Zeichenfolge (backgroundResponse) an meine content_script.js zurück. Dies funktioniert gut, wie hier gezeigt:Chrome-Erweiterung - Daten von content_script.js zurück an die Webseite übergeben?

Homepage (index.html):

jQuery("#clickmenow").on("click", function (event) 
{ 
    document.dispatchEvent(new CustomEvent('funcDoRequest', { 
     'detail': { task: 'dir' } 
    })); 

    // I want backgroundResponse here instead somehow..? 
}); 
<a href="#" id="clickmenow">Click me now</a> 

background.js

document.addEventListener("funcDoRequest", function (stuff) 
{ 
    chrome.runtime.sendMessage(stuff.detail, function (backgroundResponse) 
    { alert('Returning data from background.js: ' + backgroundResponse); }); 
}); 

Mein Problem ist, ich die Antwort backgroundResponse möchte synchron die zurückgegeben werden jQuery bei Klick irgendwie aufrufen. Wenn also jemand auf #clickmenow klickt, wird mein background.js stuff ausgeführt, und der Wert wird bis zum onclick (oder dispatchEvent) zurückgegeben, nicht nur zu content_script.js, was er gerade tut. Wie kann ich das machen? Ich kann es nicht herausfinden.

+0

zu kommunizieren, dass Ihr _content.js_ sein sollte – Xan

Antwort

0

Ich mag die Antwort backgroundResponse zu

Das ist nicht sein würde möglich synchron zurückgegeben werden - jede Kommunikation mit der Hintergrundseite wird asynchrones Messaging einzubeziehen.


ereignisbasierte Kommunikation kann nicht explizit Antworten verwenden, aber man kann genauso gut trigger another event, dass die Seite hört. Sie können eine eindeutige ID angeben, die das Inhaltsskript in die Antwort kopieren muss, um zwischen den Ereignissen zu unterscheiden.


Wenn schließlich, dass eine Webseite auf einem Domänen steuern Sie im Voraus wissen, betrachten externally_connectable verwenden und direkt auf die Hintergrundseite zu sprechen.

-1

sowohl das Content-Skript und Hintergrund Seite kann chrome.runtime.sendMessage api verwenden

//content script 
jQuery("#clickmenow").on("click", function (event) { 
    chrome.runtime.sendMessage({'detail': { task: 'dir' }}, function (backgroundResponse) { alert('Returning data from background.js: ' + 
     // handle backgroundResponse 
    }); 

}); 


//background page 

    chrome.runtime.onMessage.addListener(function(detailFromContentScript, sender, sendResponse) { 
    // handle detailFromContentscript 
    var backgroundResponse = process(detailFromContentScript) 

    // then send back response to content script 
    sendResponse(backgroundResponse) 
}) 
Verwandte Themen