google-chrome-extension
Messaggio in corso
Ricerca…
Osservazioni
Documentazione ufficiale
- Messaggio in corso
- Messaggistica nativa
-
chrome.runtimeAPI (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