Recherche…


Remarques

Documentation officielle

Envoyer une réponse de manière asynchrone

En essayant d'envoyer une réponse de manière asynchrone à partir chrome.runtime.onMessage rappel chrome.runtime.onMessage nous pourrions essayer ce mauvais code :

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

Cependant, nous trouverions que les data ne sont jamais envoyées. Cela se produit parce que nous avons placé sendResponse dans un appel asynchrone ajax, lorsque la méthode de success est exécutée, le canal de message a été fermé.

La solution serait simple, à condition que nous retournions explicitement return true; à la fin du rappel, qui indique que nous souhaitons envoyer une réponse de manière asynchrone, le canal de messages restera ouvert à l'autre extrémité (appelant) jusqu'à sendResponse que sendResponse soit exécuté.

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

Bien sûr, cela s'applique également à un return explicite du rappel 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow