google-chrome-extension
Message Passing
Suche…
Bemerkungen
Offizielle Dokumentation
- Message Passing
- Native Messaging
-
chrome.runtime
API (die meisten Messaging-Funktionen und alle Messaging-Ereignisse)
Antwort asynchron senden
Beim Versuch, eine Antwort asynchron aus chrome.runtime.onMessage
Rückruf von chrome.runtime.onMessage
zu senden, versuchen wir möglicherweise diesen falschen Code :
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);
},
});
});
Wir würden jedoch feststellen, dass data
niemals gesendet werden. Dies geschieht, weil wir sendResponse
in einen asynchronen Ajax-Aufruf gestellt haben. Wenn die success
ausgeführt wird, wurde der Nachrichtenkanal geschlossen.
Die Lösung wäre einfach, solange wir explizit return true;
am Ende des Rückrufs, was bedeutet, dass wir eine Antwort asynchron senden möchten, sodass der Nachrichtenkanal für das andere Ende (Aufrufer) sendResponse
bleibt, bis sendResponse
ausgeführt wird.
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
});
Natürlich gilt dies auch für eine explizite return
aus dem 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow