边缘扩展:runtime.sendMessage未收到响应

时间:2018-02-07 23:05:35

标签: javascript microsoft-edge

我正在编写Edge扩展,并在内容脚本和后台脚本之间进行通信。 我正在从内容脚本向背景1发送消息:

browser.runtime.sendMessage({ name: "get_card_for_website", url: document.URL }, function(response) {
    console.log("Got card for the website:");
    console.log(response);
    if (response != undefined) {
        if (response.card) {
            g_card = response.card;
            callback(response.card);
        }
    }
});

后台脚本中的监听器实现如下:

browser.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    if (request.name == 'get_card_for_website') {
        get_card_for_website(request.url)
            .done(function(element) {
                if (element.cards && element.cards.length != 0) {
                    if (element.cards.length == 1) {
                        sendResponse({'card': element.cards[0]});
                    }
                    else {
                        get_one_card_for_site(element);
                        sendResponse({'card': ""});
                    }
                }
             });
    }
}

调试器显示消息被发送到后台脚本,相应的代码执行到sendResponse。但是回到内容脚本中,这个回调函数永远不会被执行。控制台显示没有错误。 我能错过什么?

更新:我发现有些标签会收到回复而有些则没有。我真的不明白第一个和第二个之间的区别。

1 个答案:

答案 0 :(得分:0)

好的,我找出了问题的原因。 sendResponse()在.done()函数中调用,该函数是异步调用的。并根据手册:

  

sendResponse 回调仅在同步使用或有效时才有效   事件处理程序返回 true 以指示它将响应   异步。

所以我用这种方式修改了我的后台脚本的功能:

rewrite lift_match

现在它的工作就像一个魅力。