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

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

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

引用资料说:



因此,可以肯定的是,我应该只从后台脚本获得响应。

我的内容脚本执行此操作:

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;
    }
});

最佳答案

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

请注意,如果historyData为falsey,则不会发送任何响应。第二个elseif分支永远不会被采用。

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

关于javascript - Chrome扩展程序: sendMessage from content to background getting response from popup,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43172891/

10-09 14:43