【发布时间】:2016-05-16 05:24:35
【问题描述】:
我正在编写一个与 gmail api 交互的 chrome 扩展程序(chrome 45 是我的版本),我在将消息从 background.js 发送到我的内容脚本时遇到问题。异步方面是问题所在。回调后如何获取要发送的消息?
//---------in content script---------
chrome.runtime.sendMessage({ messageId: _id }, function (response) {
console.log('the respose.messagePayload is: ' + response.messagePayload);
});
//---------in background script---------
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
getMessage('me', request.messageId, function (payload) {
//i want to send my response here
//this executes and grabs the payload of data from the api, but isn't sending back the message to the content-script
sendResponse({ messagePayload: payload });
});
//this synchronous call sends a message to the content-script
//sendResponse({ messagePayload: "payload" });
return true;
});
function getMessage(userId, messageId,callback) {
var request = gapi.client.gmail.users.messages.get({
'userId': userId,
'id': messageId
});
request.execute(callback);
}
【问题讨论】:
-
您确定带有
payload的回调会执行吗?您可以通过日志记录确认吗? -
@Xan 我可以确认该部分适用于日志记录。我有将其添加到 localStorage 并从 localStorage 读取的代码,但这是一种解决方法,因为我想在 sendResponse 'localStorage.setItem(request.messageId, JSON.stringify(payload)); 中发送对象sendResponse({ messagePayload: payload });'
-
@pacopicorico 您可以使用“chrome.storage”API 将您的响应存储为对象,而不是使用字符串化。您是否尝试过我发布的第二种方法,我认为这会很好,并且可以避免您将其存储到本地存储中。
-
@NikhilSharma 您的建议无效。它提出了我正在尝试寻找解决方案的相同问题。
-
@pacopicorico 如果您从 gmail API 获得响应并且您的 localstorage 解决方法有效,那么我的建议应该有效。您能否在发送和接收消息时发布您遇到的错误或从后台脚本和内容脚本发布日志。
标签: javascript google-chrome google-chrome-extension callback