为什么我无法发送 getJSON 成功的响应?
Why do I fail to send response on getJSON's success?
我正在开发一个简单的 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
});
}
});
正如您可能看到的那样,从 getJSON
的回调主体调用 sendResponse
似乎没有发送响应,尽管调用 log
就在上面它执行完美。如果我从 getJSON
的回调主体外部调用 sendResponse
,它会正常发送响应。
知道可能是什么问题吗?
在侦听器函数的末尾,您必须 return "true" 以便与内容脚本的连接保持打开状态。
在异步调用中,侦听器函数将结束并且端口将立即关闭,因此 sendResponse
函数将不执行任何操作。
This function becomes invalid when the event listener returns, unless
you return true from the event listener to indicate you wish to send a
response asynchronously (this will keep the message channel open to
the other end until sendResponse is called).
我正在开发一个简单的 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
});
}
});
正如您可能看到的那样,从 getJSON
的回调主体调用 sendResponse
似乎没有发送响应,尽管调用 log
就在上面它执行完美。如果我从 getJSON
的回调主体外部调用 sendResponse
,它会正常发送响应。
知道可能是什么问题吗?
在侦听器函数的末尾,您必须 return "true" 以便与内容脚本的连接保持打开状态。
在异步调用中,侦听器函数将结束并且端口将立即关闭,因此 sendResponse
函数将不执行任何操作。
This function becomes invalid when the event listener returns, unless you return true from the event listener to indicate you wish to send a response asynchronously (this will keep the message channel open to the other end until sendResponse is called).