当弹出窗口打开并且只是onConnected时,从后台传递popup.js

时间:2017-04-12 14:36:01

标签: javascript google-chrome-extension

我正在尝试找到一种方法,将大量数据从后台脚本发送到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,但是弹出窗口打开后处理的新数据将不会显示。

0 个答案:

没有答案