google-chrome-extension
Bericht overslaan
Zoeken…
Opmerkingen
Officiële documentatie
- Bericht overslaan
- Native Messaging
-
chrome.runtime
API (de meeste berichtenfuncties en alle berichtengebeurtenissen)
Stuur een antwoord asynchroon
In een poging asynchroon een antwoord te verzenden vanuit chrome.runtime.onMessage
callback kunnen we deze verkeerde code proberen:
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);
},
});
});
We zouden echter ontdekken dat data
nooit worden verzonden. Dit gebeurt omdat we hebben gezet sendResponse
binnen een asynchrone ajax oproep, wanneer het success
methode wordt uitgevoerd, is de boodschap kanaal gesloten.
De oplossing zou eenvoudig zijn, zolang we expliciet return true;
aan het einde van de callback, wat aangeeft dat we een antwoord asynchroon willen verzenden, zodat het berichtkanaal voor het andere einde (beller) open blijft totdat sendResponse
wordt uitgevoerd.
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
});
Natuurlijk is dit ook van toepassing op een expliciet return
van de onMessage-callback:
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow