安装 Firefox Web 扩展时的内容脚本注入
Content Script Injection at Install for Firefox Web Extension
如果在 manifest.json 中为 Firefox 指定了内容脚本,Firefox 也会为已经打开的选项卡加载内容脚本并执行它们,即使选项卡已经处于加载和就绪状态。
Google Chrome 在为已打开的选项卡安装扩展程序时不添加任何内容脚本。为旧选项卡刷新页面时加载内容脚本。
我想问一下 Firefox 的行为是预期的还是错误?
就兼容性而言,这是一个错误。
- Chrome 不会那样做。
- 因此,很多扩展implement custom logic达到了效果。
- 必须考虑副作用。假设您的内容脚本将一些 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 只是与需要停止和清理的旧脚本通信。
如果在 manifest.json 中为 Firefox 指定了内容脚本,Firefox 也会为已经打开的选项卡加载内容脚本并执行它们,即使选项卡已经处于加载和就绪状态。
Google Chrome 在为已打开的选项卡安装扩展程序时不添加任何内容脚本。为旧选项卡刷新页面时加载内容脚本。
我想问一下 Firefox 的行为是预期的还是错误?
就兼容性而言,这是一个错误。
- Chrome 不会那样做。
- 因此,很多扩展implement custom logic达到了效果。
- 必须考虑副作用。假设您的内容脚本将一些 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 只是与需要停止和清理的旧脚本通信。