我在使用后台脚本中的sendResponse到弹出脚本时遇到问题。我发现问题涉及到我试图从getAuthToken回调中发送响应。我该如何解决这个问题?
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.task == "auth") {
chrome.identity.getAuthToken({
'interactive': true
}, function(token) {
if (chrome.runtime.lastError) {
alert(chrome.runtime.lastError.message);
return;
}
})
var x = new XMLHttpRequest();
x.open('GET', 'https://www.googleapis.com/oauth2/v2/userinfo?alt=json&access_token=' + token);
x.onload = function() {
if (x.readyState = 200) {
var data = this.responseText;
jsonResponse = JSON.parse(data);
sendResponse({
response: jsonResponse
}); //return the email to the popup
return true;
};
}
x.send();
}; //end of auth
答案 0 :(得分:0)
您必须从传递给addListener的回调中返回true
,以便能够从异步运行的代码中使用sendResponse。这是documentation
在上面的示例中,sendResponse是同步调用的。如果要异步使用sendResponse,请添加return true;到onMessage事件处理程序。