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

标签 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)
            }
        }
    });
});

最佳答案

参见Port lifetime更多详情,您可以收听runtime.Port.onDisconnect ,当 channel 另一端没有有效端口时会触发该函数。

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

关于javascript - Chrome 扩展消息传递 API - 检测端口何时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36718373/

相关文章:

javascript - P 元素复制到输入值并仅选择一项

javascript - 如何从 JavaScript 中的数字数组或数字字符串创建整数或数字

client-server - 用于服务器到客户端通信的 MSMQ

.net - Azure 服务总线主题分区

javascript - 为什么 ctx.drawImage 只是将视频元素的一部分绘制到 Canvas 上?

java - 拦截 JavaScript 卸载事件

javascript - 从网页中提取电话号码,然后用它做一些事情

javascript - Google Chrome 扩展程序自动更新

javascript - Chrome 扩展程序键盘快捷键需要按两次才能更改值

RabbitMQ 使用自定义 header 来存储消息参数