Buscar..


Observaciones

Documentacion oficial

Enviar una respuesta de forma asíncrona.

En el intento de enviar una respuesta de forma asincrónica desde la chrome.runtime.onMessage llamada chrome.runtime.onMessage podemos intentar este código incorrecto :

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);
        },
    });
});

Sin embargo, encontraríamos que los data nunca se envían. Esto sucede porque hemos puesto sendResponse dentro de una llamada ajax asíncrona, cuando se ejecuta el método de success , el canal de mensaje se ha cerrado.

La solución sería simple, siempre y cuando devolvamos explícitamente return true; al final de la devolución de llamada, lo que indica que deseamos enviar una respuesta de forma asíncrona, por lo que el canal de mensajes se mantendrá abierto al otro extremo (llamante) hasta que se ejecute 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
});

Por supuesto, también se aplica a un return explícito de la devolución de llamada de 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow