2016-05-26 4 views
0

я пытаюсь получить ответ от SendResponse к chrome.runtime.sendMessage, но его всегда с указанием неопределен, ниже мой код:Не получая ответа Chrome расширение,

chrome.runtime.sendMessage(JSON.stringify(contact), function(response) { 
    console.log('Response: ', response); // This is showing undefined 
}); 

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    contact.addContact(request, function() { 
     sendResponse({success: 'true'}); 
    }); 
}); 

Так что, когда я прохожу SendResponse ({успех : true}), который должен быть получен в обратном вызове на chrome.runtime.sendMessage, но вместо этого его показ не определен.

ответ

2

Возможно, проблема связана с асинхронностью contact.addContact. Это означает, что слушатель заканчивается до того, как вызывается sendResponse. Возвращаясь true от слушателя, как это должно исправить:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    contact.addContact(request, function() { 
     sendResponse({success: 'true'}); 
    }); 
    return true; 
}); 

От documentation of chrome.runtime.onMessage:

SendResponse:

Функция для вызова (не более одного раза), когда у вас есть ответ. Аргумент должен быть любым JSON-объектом. Если у вас есть более одного слушателя onMessage в том же документе, то только один может отправить ответ. Этой функция становится недействительной, когда событие слушатель возвращается не, если вы возвращаете истинными от слушателя событий в указать вы хотите отправить ответ асинхронно (это будет держать сообщения канала открыто для другого конца, пока SendResponse не называется).

+0

Да, сработало, спасибо большое ... :) –

Смежные вопросы