当扩展存储设置时,避免Firefox禁用签名扩展

时间:2015-12-19 20:17:23

标签: firefox firefox-addon

我想将一些用户设置存储在一个文件" abc.text"在本地文件夹" abc"使用nsILocalFile在扩展程序内部。但是,每次扩展程序保存文件时,Firefox都会通知我的扩展程序未经过验证,然后禁用我的扩展程序。也许将文件保存到扩展目录更改了其签名。那么,如何避免这种情况?

2 个答案:

答案 0 :(得分:2)

存储扩展程序的动态数据文件:
签名后,扩展目录[profileDir]/extensions中的所有文件都具有Mozilla生成的签名。这些签名存储在[profileDir]/extensions/META-INF中包含的文件中。在您的扩展目录中,对文件,任何其他文件或删除任何文件的任何更改都将导致扩展签名无效。如果签名无效,并且您正在使用要求扩展名的Firefox,则您的扩展程序将被禁用。 (有关Firefox版本与可用于附加组件开发的替代方案之间的差异列表,请参阅“Signing XUL-based add-on for Firefox”的答案。)

解决方法是,您需要将数据存储在扩展目录之外的目录中。自Firefox 32起,存储加载项数据的位置应为:[profile]/extension-data/[add-on ID]

有关此目录的更多详细信息,包括为包含该目录的文件生成URI的代码,请参阅我对问题的回答:“Where to save files from Firefox add-on?

存储扩展程序设置(首选项):
对于简单甚至中等复杂的用户设置,存储它们的“正常”位置在Firefox preferences。对于XUL和无重新启动的加载项,您可以看到:Preferences。对于Addon-SDK,这些被称为simple-prefs。有关详细信息,您可以阅读searching MDN for preferences时返回的大部分结果(如果不是全部的话)。

使用Firefox首选项将扩展设置放在用户期望看到的位置(about:addons,然后是每个加载项的选项页面)。这保持了Firefox用户期望看到并知道如何与之交互的一致用户界面。它还应该导致您不得不进行更少的编码来创建自己的UI设计并采用特定于扩展的存储配置信息的方法。

如果扩展需要存储大量数据,那么您应该使用外部文件,就像您当前尝试的那样。实际上有多大的“大量数据”有些模糊不清。

关于MDN的说明(nsIPrefBranch)说:

  

注意:首选项系统不是为存储大量数据而设计的   data:所有首选项都存储在一个文件中,该文件在中读取   应用程序启动。如果你发现自己想知道是什么   考虑,您可以存储在字符串首选项中的最大数据量   单独存储数据,例如flat filesqlite database

答案 1 :(得分:1)

由于有关签名的新规则,因此不能使用Firefox 44。如果您更改了扩展程序,它将是未签名的,然后被阻止。

第一个解决方案:

  • 使用Firefox开发人员版或Firefox 43。

  • 在about:config中
  • ,将xpinstall.signatures.required设置为false。

第二个解决方案:使用firefox版本< 43或Firefox ESR根本不处理签名(暂时)。

https://wiki.mozilla.org/Add-ons/Extension_Signing

如果您遇到Firefox< 43的问题,请删除作为签名目录的扩展名的META-INF目录。扩展名将是未签名的,但不会“签名并修改,然后阻止”。