我正在使用简单的Chrome扩展程序。我有类似的东西
/* content script */
chrome.runtime.sendMessage({msg: "marco"}, function(response){
if (response.foo){
console.log(response.foo);
}
});
/* background script */
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
if (request.msg){
// sendResponse({foo: "polo"}); // works fine
// load a local JSON file
$.getJSON("path/to/file.js", function(data){
console.log("success"); // works fine
sendResponse({foo: "polo"}); // does not work
});
}
});
正如您可能看到的那样,sendResponse
回调正文中对getJSON
的调用似乎似乎没有发送回复,尽管对log
的调用是正确的它上面完美地执行。如果我从sendResponse
的回调主体外部拨打getJSON
,则会正常发送回复。
知道可能出现什么问题?
答案 0 :(得分:1)
在侦听器函数的末尾,您必须返回“true”,以便与内容脚本的连接保持打开状态。
在异步调用中,侦听器函数将结束,端口将立即关闭,因此sendResponse
函数将不执行任何操作。
除非事件侦听器返回,否则此函数将变为无效 从事件监听器返回true表示您希望发送一个 异步响应(这将使消息通道保持打开状态 另一端直到调用sendResponse)。