google-chrome-extension
Przekazywanie wiadomości
Szukaj…
Uwagi
Oficjalna dokumentacja
- Przekazywanie wiadomości
- Native Messaging
-
chrome.runtime
API (większość funkcji przesyłania komunikatów i wszystkie zdarzenia przesyłania komunikatów)
Wyślij odpowiedź asynchronicznie
Aby asynchronicznie wysłać odpowiedź z wywołania zwrotnego chrome.runtime.onMessage
możemy wypróbować ten zły 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);
},
});
});
Stwierdzilibyśmy jednak, że data
nigdy nie są wysyłane. Dzieje się tak, ponieważ umieściliśmy sendResponse
w asynchronicznym wywołaniu ajax, kiedy wykonano metodę success
, kanał komunikatów został zamknięty.
Rozwiązanie byłoby proste, o ile wyraźnie zwrócimy wartość return true;
na końcu wywołania zwrotnego, co oznacza, że chcemy wysłać odpowiedź asynchronicznie, więc kanał komunikatów pozostanie otwarty na drugim końcu (wywołującym) do momentu wykonania sendResponse
.
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
});
Oczywiście dotyczy to również jawnego return
z wywołania zwrotnego 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow