安装 Firefox Web 扩展时的内容脚本注入

Content Script Injection at Install for Firefox Web Extension

如果在 manifest.json 中为 Firefox 指定了内容脚本,Firefox 也会为已经打开的选项卡加载内容脚本并执行它们,即使选项卡已经处于加载和就绪状态。

Google Chrome 在为已打开的选项卡安装扩展程序时不添加任何内容脚本。为旧选项卡刷新页面时加载内容脚本。

我想问一下 Firefox 的行为是预期的还是错误?

就兼容性而言,这是一个错误。

  1. Chrome 不会那样做。
  2. 因此,很多扩展implement custom logic达到了效果。
  3. 必须考虑副作用。假设您的内容脚本将一些 UI 注入页面。然后更新扩展。这相当于扩展重启,突然间你有 2 个 UI 副本。如果您只是附加事件侦听器也有效,因为(至少在 Chrome 的情况下)旧内容脚本的上下文继续存在(处于 "orphaned" 状态)。

最后一点非常重要,可能也是 Chrome 默认不这样做的原因。在某些时候,我做了一个相关的 very long post about this problem - if you're going to report this as a bug to Mozilla, please include that. There's also this feature request

明智的(并且向后兼容)是在清单中的内容脚本描述中添加一个参数——是否注入现有页面。开发人员将负责保证副作用得到处理。这通常 requires even more code 只是与需要停止和清理的旧脚本通信。