我有一个Chrome扩展程序正在发送登录消息:
chrome.runtime.sendMessage data, (response) ->
debugger
if response.api_key
$("body").fadeOut 1000, -> window.close()
else
App.Ui.clearForm()
App.Ui.showErrorMessage()
但是,回调永远不会被击中:
chrome.runtime.onMessage.addListener (request, sender, sendResponse) ->
if request and request.action is "login"
$.ajax(
type: "POST"
url: App.Config.authUrl()
data: request.data
dataType: "json"
).then( (data) ->
App.Storage.saveSession(data.user)
sendResponse(data.user)
, (data) ->
sendResponse(data)
)
我做错了吗?
答案 0 :(得分:4)
有关sendResponse
的信息,请参阅documentation for onMessage
:
当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到调用sendResponse为止)。 p>
因此,要修复代码,您需要在异步调用后在侦听器中返回true
。