我正在尝试将内容脚本中的消息发送到我的后台脚本。当后台收到消息时,它会将数据发送回回调中的内容脚本。
我的弹出窗口还有一个来自内容脚本的消息的监听器,但不响应用于后台脚本的消息。
然后内容正在接收未定义的内容。从回调中回来,我认为这是由接收消息但没有响应的弹出窗口引起的。
参考文献说:
注意:如果多个页面正在侦听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;
}
});
答案 0 :(得分:0)
if (msg.type = 'ACTIVITY_HISTORY_READY' && historyData) {
请注意,如果historyData
为假,则表示您未发送任何回复。 1}}的{{1}}分支永远不会被占用。
您应该从第一个else
中删除if
。弹出代码与此无关。