【发布时间】:2013-11-19 17:00:00
【问题描述】:
我正在尝试在内容脚本和扩展程序之间传递消息
这是我在内容脚本中的内容
chrome.runtime.sendMessage({type: "getUrls"}, function(response) {
console.log(response)
});
在后台脚本中我有
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.type == "getUrls"){
getUrls(request, sender, sendResponse)
}
});
function getUrls(request, sender, sendResponse){
var resp = sendResponse;
$.ajax({
url: "http://localhost:3000/urls",
method: 'GET',
success: function(d){
resp({urls: d})
}
});
}
现在,如果我在 getUrls 函数中的 ajax 调用之前发送响应,则响应发送成功,但是在我发送响应时,在 ajax 调用的成功方法中,当我去时它不会发送它进入调试我可以看到sendResponse函数代码中的端口为空。
【问题讨论】:
-
存储对 sendResponse 参数的引用至关重要。没有它,响应对象将超出范围并且无法调用。感谢提示我解决问题的代码!
-
也许另一种解决方案是使用 Promise 将所有内容包装在异步函数中并为异步方法调用 await?
标签: javascript google-chrome google-chrome-extension google-chrome-app