google-chrome-extension
메시지 전달 중
수색…
비고
비동기 적으로 응답 보내기
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
는 전송되지 않습니다. 이것은 success
메소드가 실행될 때 비동기식 아약스 호출 내에 sendResponse
넣었 기 때문에 발생합니다. 메시지 채널이 닫혔습니다.
해결책은 우리가 명시 적 return true;
간단 할 것 return true;
콜백이 끝나면 비동기 적으로 응답을 보내려고하므로 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
});
물론 onMessage 콜백에서 명시 적으로 return
하는 경우에도 적용됩니다.
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