WebExtensions:onConnect 有什么意义? onMessage 似乎是多余的

问题描述

我试图找出如何识别(许多)创建的选项卡将消息发送到后台脚本,并认为要走的路是 background.js 中的 sender.tab.id browser.runtime.onMessage.addListener((msg,sender,respF)=>{})

但后来我遇到了 onConnect,它将一个 runtime.Port 对象传递给它的处理程序。它可以用来更优雅地识别哪个标签尝试与背景对话吗?如果不是,那么 onConnect 的意义何在?

解决方法

onConnect 的要点是为您提供一个 state 更改,您可以在其中管理您的 onConnect 逻辑 - 通常是修改您的侦听器。

例如

  • addListener 连接时应处于活动状态
  • removeListener 连接时应禁用
  • hasListener 检查连接的实例是否已经具有该侦听器
  • 等。例如另外onConnectExternal