수색…


비고

공식 문서

비동기 적으로 응답 보내기

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