为什么我没有对getJSON的成功发送响应?

时间:2015-01-31 10:45:12

标签: google-chrome-extension getjson message-passing

我正在使用简单的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,则会正常发送回复。

知道可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

在侦听器函数的末尾,您必须返回“true”,以便与内容脚本的连接保持打开状态。 在异步调用中,侦听器函数将结束,端口将立即关闭,因此sendResponse函数将不执行任何操作。

来自documentation

  

除非事件侦听器返回,否则此函数将变为无效   从事件监听器返回true表示您希望发送一个   异步响应(这将使消息通道保持打开状态   另一端直到调用sendResponse)。