0

Firefox Bootstrapped Addons 不会像 Overlay Addons 那样读取默认首选项。
我了解在安装 Bootstrapped Addon 时需要手动设置默认首选项。

初始安装后,我想设置默认首选项的唯一好处是启用重置首选项(除非 FF 在其他地方跟踪它)。

问题是,是否必须阅读并设置每个默认首选项startup()
如果是这样,它们将被保存在哪里(即getDefaultBranch()从哪里获取数据)?

参考:
如何将覆盖扩展转换为无重启
Mozilla 首选项简要指南
Restartless Add-ons Default Preferences
Preferences

4

1 回答 1

0

我已通过电子邮件得到答复,我将其逐字逐句发布在此处,以供用户使用。

来自 Dave Garrett,Flagfox的开发人员和 如何将覆盖扩展转换为无重启的作者

在运行时设置的默认首选项无处保存。默认首选项的磁盘缓存中没有。

在 Firefox 启动时,默认首选项会从它们的不同位置读取到首选项系统中。(Firefox 在omni.ja 中有自己的,插件在他们的安装文件夹/文件中有自己的)这个分支的副本也被维护,从prefs.js 中读取的用户首选项被覆盖到其中。(用户)首选项的设置改变了首选项系统中的状态,该状态(最终)记录在 prefs.js 中(同样,仅保存非默认首选项值)。默认首选项的设置会更改首选项系统中的状态,但这不会保存在任何地方。每次开始时都需要加载它们。对于旧的标准默认首选项系统,Firefox 会在每次启动时为您加载它们。对于无重启扩展,您需要自己执行此操作。每个插件启动都需要加载默认首选项。

您当然可以使用 prefs 而根本没有默认值,但是您必须在所有地方对代码中的默认值进行硬编码。简单地为无重启插件实现一个默认的首选项系统是一个更干净的解决方案,可以避免你可能会犯的错误。

由于 prefs 系统只将非默认 prefs 存储到磁盘,因此一旦它们因任何原因恢复为默认值,它也可以大大提高保存 prefs 的效率。例如,我在字符串首选项中有一个 JSON blob。(从 v5.0 开始,它现在相当紧凑)如果用户通过更改选项对话框中的某些内容来更改需要保存的内容,则此 JSON blob 将完整存储在 prefs.js 中。如果用户随后恢复该更改,他们的 JSON blob 将恢复为之前的值。如果这等同于默认值,那么 prefs.js 将不存储任何值并使用默认值。在默认情况下,这减少了从 prefs.js 开始时需要加载的内容。实际上,我可以使用 prefs API 来检测该值当前是否设置为默认值,并且我完全绕过从打包的 JSON 用户 pref 加载并直接转到完整的 JSON 文件,在这种情况下我什至不需要从 prefs 加载系统。这是一种仅在这种情况下才真正适用的优化,但它是另一个示例,为什么正确使用默认值会很有用。

关于删除默认首选项shutdown()

通常不,您不需要在关机时删除默认首选项,尽管有一个合理的论点认为这样做可能是正确的(但可能是个坏主意)。需要明确的是,有几个单独的关闭情况需要考虑:

1) Firefox 关机 + 插件关机:在这种情况下,您不应该进行任何不需要保存数据的关机。无需卸载您的东西,因为应用程序正在关闭,它会为您完成。

2)由于插件更新导致插件关闭:在这种情况下,您需要正确卸载已加载的所有内容,以便下一个版本可以干净地加载。但是,通常无需担心此处的默认首选项。新版本将被加载并覆盖旧版本。(除非已删除默认值,在这种情况下,它将在内存中徘徊,什么也不做)

3)由于插件禁用而导致插件关闭:在此处加载默认首选项除了占用少量内存外没有任何伤害。如果您有很多首选项,我想可能需要卸载它们,但这不是一个经常出现的用例。我根本不会担心卸载首选项,除非您的首选项太多或首选项太大以至于您在浏览器错误控制台中收到关于它们太大的警告。(在这种情况下你应该解决这个问题)

即使在关机时清理默认首选项可能是个好主意,但删除具有用户首选项的默认首选项可能会破坏事情。我建议让他们一个人呆着。

于 2014-07-01T04:23:05.010 回答