Google chrome extension 如何在多个选项卡中保持chrome扩展同步

Google chrome extension 如何在多个选项卡中保持chrome扩展同步,google-chrome-extension,Google Chrome Extension,我正在尝试创建一个可以在多个选项卡上使用的chrome扩展,我想知道最好的方法是什么 为简单起见,假设扩展只显示一个数字,当该数字在一个选项卡中更改时,它必须在所有选项卡中更改 已环顾四周,但找不到以下信息: 首先运行的是什么-背景脚本还是内容脚本 我应该使用长寿命连接还是单次发送消息 最好是从内容还是从背景创建长期存在的连接 是否最好使用存储和存储更改事件而不是消息 我应该为每个内容脚本维护单独的端口,还是在断开连接时使用一个端口 这些问题可能是错误的,因为我可能会走错方向 有人能给我指出

我正在尝试创建一个可以在多个选项卡上使用的chrome扩展,我想知道最好的方法是什么

为简单起见,假设扩展只显示一个数字,当该数字在一个选项卡中更改时,它必须在所有选项卡中更改

已环顾四周,但找不到以下信息:

  • 首先运行的是什么-背景脚本还是内容脚本
  • 我应该使用长寿命连接还是单次发送消息
  • 最好是从内容还是从背景创建长期存在的连接
  • 是否最好使用存储和存储更改事件而不是消息
  • 我应该为每个内容脚本维护单独的端口,还是在断开连接时使用一个端口
这些问题可能是错误的,因为我可能会走错方向


有人能给我指出最佳实践吗。

这些问题中的任何一个都可能有更多的答案;DR/“最佳实践”是保持简单,而不是过于复杂,至少一开始是这样,如果它足够好,那么就到此为止。在性能方面是否足够好,可以使用任何JS计时API或在devtools时间轴分析器中进行衡量

首先运行的是什么-背景脚本还是内容脚本

在Chrome中,这是一个棘手的问题:在浏览器启动期间,如果启用了浏览器选项以恢复上一个会话(或在启动时打开网页),那么将首先加载活动选项卡的内容脚本,然后加载背景脚本,然后加载其他选项卡的内容脚本。如果浏览器已经运行,则取决于后台脚本是否为持久脚本:持久脚本在初始化用户配置文件时仅启动一次,非持久脚本仅在存在API事件或尚未从上一个API事件终止时运行

在Chrome中,使用
“persistent”:false声明的后台脚本仅在必要时在添加了侦听器的API事件上启动,然后在15秒不活动后终止。在ManifestV3中,服务工作者用于后台脚本,因此超时时间为30秒

在FF中,后台脚本只能是持久的,并且总是先运行

我应该使用长寿命连接还是单次发送消息

99.999%的情况下,一条消息就足够了。只有在极少数情况下才真正需要长时间连接,例如a)如果您每秒向每个选项卡发送几十条或更多消息,b)如果您需要手动跟踪断开连接事件,c)其他一些我现在不记得的罕见事情

最好是从内容还是从背景创建长期存在的连接

从内容脚本,否则您需要猜测选项卡是否已经运行了您的内容脚本(如果您太早,那么它将被忽略)或等待其“DOMContentLoaded”事件,但如果您想处理页面加载过程的早期阶段,这可能太晚了

是否最好使用存储和存储更改事件而不是消息

视情况而定。例如,在一些简单的情况下,onChanged事件将允许您完全摆脱后台脚本。如果存储中的大多数更改都与内容脚本的行为相关,那么这样的事件将非常有意义,但是如果您为不相关的内容大量修改存储,那么这样的事件将在内容脚本运行的每个选项卡中徒劳地触发

我应该为每个内容脚本维护单独的端口,还是在断开连接时使用一个端口


每个端口本质上是不同的,因为没有单一的内容脚本:每个选项卡/框架运行自己的内容脚本实例。就像同一个jquery.js的一个实例会被从同一个URL加载它的10个选项卡中的每一个使用一样。

谢谢-太棒了