我试图将消息从内容脚本发送到我的后台脚本。当后台收到消息时,它将数据发送回回调中的内容脚本。
我的弹出窗口也有一个监听器,用于监听来自内容脚本的消息,但不响应用于后台脚本的消息。
然后,内容正在从回调中接收回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,则不会发送任何响应。第二个else
的if
分支永远不会被采用。您应该从第一个
historyData
中删除if
。弹出代码与此无关。关于javascript - Chrome扩展程序: sendMessage from content to background getting response from popup,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43172891/