google-chrome-extension
Передача сообщений
Поиск…
замечания
Официальная документация
- Передача сообщений
- Индивидуальные сообщения
-
chrome.runtime
API (большинство функций обмена сообщениями и все события обмена сообщениями)
Отправить ответ асинхронно
В попытке отправить ответ асинхронно с обратного вызова chrome.runtime.onMessage
мы можем попробовать этот неправильный код :
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);
},
});
});
Однако мы обнаружили, что data
никогда не отправляются. Это происходит потому, что мы поместили sendResponse
внутри асинхронного вызова ajax, когда выполняется метод success
, канал сообщения был закрыт.
Решение было бы простым, если мы явно return true;
в конце обратного вызова, что указывает на то, что мы хотим отправить ответ асинхронно, поэтому канал сообщения будет оставаться открытым на другом конце (вызывающем абоненте) до sendResponse
пор, пока sendResponse
будет выполнен 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
});
Конечно, это относится и к явному return
от обратного вызова 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow