7

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

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

我想问的是Firefox的行为是预期的还是bug?

4

1 回答 1

6

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

  1. Chrome 不这样做。
  2. 因此,许多扩展实现了自定义逻辑来实现效果。
  3. 必须考虑副作用。假设您的内容脚本将一些 UI 注入到页面中。然后更新扩展。这相当于重新启动扩展程序,突然间您有了 2 个 UI 副本。如果您只是附加事件侦听器也有效,因为(至少在 Chrome 的情况下)旧内容脚本的上下文继续存在(处于“孤立”状态)。

最后一点非常重要,这可能是 Chrome 默认不这样做的原因。在某个时候,我就这个问题发表了一篇很长的文章——如果你打算将此作为一个错误报告给 Mozilla,请包括在内。还有这个相关的功能请求

明智的(并且向后兼容)是在清单中的内容脚本描述中添加一个参数 - 是否注入现有页面。由开发人员来保证副作用得到处理。这通常需要更多的代码才能与需要结束和清理的旧脚本进行通信。

于 2016-05-10T07:40:17.753 回答