Chrome扩展程序:sendMessage从内容到后台获取弹出式响应

时间:2017-04-02 19:55:39

标签: javascript google-chrome-extension

我正在尝试将内容脚本中的消息发送到我的后台脚本。当后台收到消息时,它会将数据发送回回调中的内容脚本。

我的弹出窗口还有一个来自内容脚本的消息的监听器,但不响应用于后台脚本的消息。

然后内容正在接收未定义的内容。从回调中回来,我认为这是由接收消息但没有响应的弹出窗口引起的。

参考文献说:

  

注意:如果多个页面正在侦听onMessage事件,则只有   首先为特定事件调用sendResponse()将成功   发送回复。对该事件的所有其他回复都将是   忽略。

所以我肯定只应该从我的后台脚本中获得响应。

我的内容脚本执行此操作:     function notifyReady(){

chrome.runtime.sendMessage({
    type: 'ACTIVITY_HISTORY_READY'
},
    function (response) {
        console.log(">>>>Response: ", response);
        if (response.type == 'HISTORY_DATA') {
            processLog(response);
        }
    });

}

我的后台脚本听起来像这样:

chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
console.log("received " + msg.type);
if (msg.type = 'ACTIVITY_HISTORY_READY' && historyData) {
    if (historyData) {
        sendResponse({
            type: "HISTORY_DATA",
            position: historyData.position,
            company: historyData.company
        });
        historyData = '';
    } else {
        sendResponse({
            type: "NO_DATA"
        });
    }
}

});

我弹出窗口中的监听器是:

chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {

if (msg.type == 'JOB_DETAILS') {

    sendResponse("OK!");

    document.getElementById('position').value = msg.position;
    document.getElementById('company').value = msg.company;
    document.getElementById('url').value = sender.tab.url;
}

});

1 个答案:

答案 0 :(得分:0)

if (msg.type = 'ACTIVITY_HISTORY_READY' && historyData) {

请注意,如果historyData为假,则表示您未发送任何回复。

您应该从第一个else中删除if。弹出代码与此无关。