google-chrome-extension
Meddelande vidarebefordras
Sök…
Anmärkningar
Officiell dokumentation
- Meddelande vidarebefordras
- Infödda meddelanden
-
chrome.runtime
API (de flesta meddelandefunktioner och alla meddelandeshändelser)
Skicka ett svar asynkront
I försök att skicka ett svar asynkront från chrome.runtime.onMessage
återuppringning kan vi prova fel kod :
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data won't be sent
sendResponse(data);
},
});
});
Vi skulle dock finna att data
aldrig skickas. Detta händer eftersom vi har lagt sendResponse
i ett asynkront ajax-samtal, när success
körs har meddelandekanalen stängts.
Lösningen skulle vara enkel, så länge vi uttryckligen return true;
i slutet av återuppringningen, vilket indikerar att vi vill skicka ett svar asynkront, så att meddelandekanalen hålls öppen mot den andra änden (uppringaren) tills sendResponse
körs.
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data would be sent successfully
sendResponse(data);
},
});
return true; // keeps the message channel open until `sendResponse` is executed
});
Naturligtvis gäller det även en uttrycklig return
från onMessage-återuppringning:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.action == 'get') {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data would be sent successfully
sendResponse(data);
},
});
return true; // keeps the message channel open until `sendResponse` is executed
}
// do something synchronous, use sendResponse
// normal exit closes the message channel
});
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow