google-chrome-extension
Messaggio in corso
Ricerca…
Osservazioni
Documentazione ufficiale
- Messaggio in corso
- Messaggistica nativa
-
chrome.runtime
API (la maggior parte delle funzioni di messaggistica e tutti gli eventi di messaggistica)
Invia una risposta in modo asincrono
Nel tentativo di inviare una risposta in modo asincrono dal callback chrome.runtime.onMessage
potremmo provare questo codice errato :
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);
},
});
});
Tuttavia, troveremmo che i data
non sono mai stati inviati. Ciò accade perché abbiamo inserito sendResponse
all'interno di una chiamata asincrona ajax, quando il metodo di success
è stato eseguito, il canale del messaggio è stato chiuso.
La soluzione sarebbe semplice, purché return true;
esplicitamente return true;
alla fine del callback, che indica che desideriamo inviare una risposta in modo asincrono, quindi il canale del messaggio sarà tenuto aperto all'altro capo (chiamante) fino a quando sendResponse
verrà eseguito.
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
});
Naturalmente, si applica anche a un return
esplicito dal callback onMessage:
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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow