2012-10-16 67 views
1

我有一个Firefox扩展,实现了一堆可以从Firefox中的上下文菜单调用的小函数。我制作了一个首选项窗口,为每个首选项显示一个radiogroup,允许该功能显示在Firefox主菜单中,显示在由扩展程序创建的子菜单中,或隐藏。这对于每个扩展功能来说都是完全相同的,只改变以下内容:首选项ID,首选项名称,被叫功能名称和每个无线电组的标签。是否可以为每个函数创建包含这四个字符串的数组,然后动态定义所有的首选项,而不是为每个首选项复制和粘贴相同的代码?动态定义Firefox扩展首选项

我很确定可以动态地在我的偏好窗口中定义XUL。但是,我不确定使用pref()命令在默认文件夹中定义默认首选项(我不确定如何访问扩展中其他位置定义的字符串)。我也不确定是否可以动态定义preferences.xul文件的定义,或者是否需要键入它们。

另外,你认为这是个好主意还是坏主意?我认为这会使添加/删除功能更容易。

回答

1

听起来对我来说是个好主意。您可以通过使用DOM函数(包括preferences.xul的内容,无论它们是什么)创建XUL窗口的内容来动态执行静态XUL文件中的任何操作。就默认值而言,如果尚未设置任何值,则可以在浏览器启动时使用首选项API手动设置它们。您可以使用observer service来处理profile-after-change通知。使用preferences API来检查您的首选项是否已经设置了值,如果没有,则将它们设置为您选择的默认值。

要检查pref是否已存在,请使用相应的nsIPrefBranch方法尝试获取它。如果抛出异常,则不存在。

+0

感谢您使用偏好设置API设置偏好的建议。我会尝试。在回复之前,我已经使用JSON将包含首选项的数组保存为字符串,但能够将它们保存为单独的首选项应该更清晰。 –

+0

使用变更后的配置文件通知来初始化首选项是否很重要?我的扩展有一个init()函数,由一个“加载”事件监听器调用,所以我正在考虑将首选项设置在那里。我将不得不详细了解如何执行更改后的配置文件通知。 –

+0

我使用我的init()函数实现了我的动态首选项,并且所有内容似乎都能正常工作。只是为了勾画出以防万一任何人在稍后看到:我将所有首选项存储为存储为主扩展对象中字段的字符串数组。然后我编写了一个函数来循环这个数组,并为每个字符串创建所有必要的XUL,并使用该字符串形成id,并将prefpane的onpaneload设置为该函数。另一个函数遍历数组,并在init()中将每个pref设置为默认值(如果未设置)。 –