Chrome扩展消息传递API - 检测端口何时关闭

时间:2016-04-19 12:27:20

标签: javascript google-chrome-extension messaging

在我的扩展程序中,我使用多个端口在不同的内容脚本之间进行通信(使用background.js作为中介)。当用户更新其设置时,content.js的所有活动版本都需要接收此信息。

我目前在background.js中持有一个列表,用于保存所有活动content.js端口的ID。但是,一旦页面重新加载,旧的id就会变得过时,因为端口已关闭。我想再次从列表中删除此ID,以防止列表大小变大。如何检测此端口是否已关闭?

从content.js设置端口的代码:

var page_port = chrome.runtime.connect({name: unique_id});
page_port.postMessage({source: "page", page_id: unique_id, status: "ready", url: url});
page_port.onMessage.addListener(function(msg) {
    console.log(msg)
});

background.js中的代码:

page_dict = []
chrome.runtime.onConnect.addListener(function(port) {
    window[port.name] = port
    port.onMessage.addListener(function(msg) {
        if (msg.source === 'page') {
            if (jQuery.inArray(port.name, page_dict === -1)) {
                page_dict.push(port.name)
            }
        }
    });
});

1 个答案:

答案 0 :(得分:3)

有关详细信息,请参阅Port lifetime,您可以收听runtime.Port.onDisconnect,当通道的另一侧没有有效端口时会触发此事件。

port.onDisconnect.addListener(function() {
    //Your logic
});