我正在尝试找到一种方法,将大量数据从后台脚本发送到popup.js并实时显示。所以例如,如果我在弹出窗口打开时发送一个元素,它会在那里显示它。如果弹出窗口关闭,它应该等到用户打开它。 我遇到的问题是找到一种做实时消息的好方法。 这是我对弹出功能的追加,即使用元素和tabId:
调用function appendPopUp(element, tab) {
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == "knockknock");
port.onMessage.addListener(function(msg) {
if (msg.tab == tab) {
port.postMessage({element: element});
return true;
}
});
});
}
正如您所看到的,我等待onConnect以便开始发送消息,然后等待来自pop.up的消息与tabId一起检查它是否匹配。 我的popup.js:
var ourWindow = null;
chrome.tabs.getSelected(window.id,
function (response) {
ourWindow = response.id;
var port = chrome.runtime.connect({name: "knockknock"});
port.postMessage({tab: ourWindow});
port.onMessage.addListener(function(msg) {
console.log(msg.element);
document.getElementById('data').innerHTML += msg.element;
return true;
});
});
只有当我连接时才会在那里发送消息。 但是,如果我尝试在从后台脚本收到的每条消息之后发送消息,它将进入无限循环,直到扩展崩溃。 只有当我打开时,数据才会进入innerHTML,但是弹出窗口打开后处理的新数据将不会显示。