Возврат данных пропуска из Background.html в popup.html - PullRequest
0 голосов
/ 22 февраля 2011

Я передал данные из фона во всплывающее окно штрафа. Однако, если я возвращаю response.reply, я получаю неопределенное значение, но если я его распечатываю, оно не неопределенное. Это так, как я ожидал. Как мне вернуть это?

popup.html

function getURL(action){
    chrome.extension.sendRequest(
            {
                req: "geturl",
                act: action
            },
                function(response)
                {
                    return response.reply;
                });
            }

background.html

function getURL(action)
{
    var url = cmshttp+cmshooksurl+"?action="+action;
    return url;
}

1 Ответ

1 голос
/ 22 февраля 2011

Вы не можете вернуть значение из асинхронной функции. Вместо этого вам нужно передать значение следующей функции (обратный вызов).

Ваш код должен выглядеть следующим образом:

function getURL(action, callback){
    chrome.extension.sendRequest(
            {
                req: "geturl",
                act: action
            },
                function(response)
                {
                    callback(response.reply);
                }
    );
}

Использование:

getURL("some_action", function(reply) {
    console.log("reply is:", reply);
});

background.html:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.req == "geturl") {
        sendResponse({reply:"reply from background"});
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...