Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox addon 动态定义Firefox扩展首选项_Firefox Addon_Xul - Fatal编程技术网

Firefox addon 动态定义Firefox扩展首选项

Firefox addon 动态定义Firefox扩展首选项,firefox-addon,xul,Firefox Addon,Xul,我有一个Firefox扩展,它实现了一系列可以从Firefox上下文菜单调用的小函数。我制作了一个preferences窗口,为每个首选项显示一个radiogroup,允许该函数显示在Firefox主菜单中,显示在扩展创建的子菜单中,或者隐藏。这与每个扩展函数的工作方式完全相同,只需更改以下内容:首选项id、首选项名称、调用的函数名称以及每个无线组的标签。是否可以为每个函数创建一个包含这四个字符串的数组,然后动态定义所有首选项,而不是为每个首选项复制和粘贴相同的代码 我非常确定可以在我的首选项窗

我有一个Firefox扩展,它实现了一系列可以从Firefox上下文菜单调用的小函数。我制作了一个preferences窗口,为每个首选项显示一个radiogroup,允许该函数显示在Firefox主菜单中,显示在扩展创建的子菜单中,或者隐藏。这与每个扩展函数的工作方式完全相同,只需更改以下内容:首选项id、首选项名称、调用的函数名称以及每个无线组的标签。是否可以为每个函数创建一个包含这四个字符串的数组,然后动态定义所有首选项,而不是为每个首选项复制和粘贴相同的代码

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


还有,你认为这是个好主意还是个坏主意?我想这会使添加/删除函数更容易。

听起来是个好主意。在静态XUL文件中可以执行的任何操作都可以通过使用DOM函数创建XUL窗口的内容(包括
preferences.XUL
的内容,不管它们是什么)来动态执行。就默认值而言,如果尚未设置任何值,则可以在浏览器启动时使用preferences API手动设置默认值。您可以使用来处理更改后的
配置文件
通知。使用检查Pref是否已经设置了值,如果没有,则将其设置为您选择的默认值


要检查pref是否已经存在,请使用适当的方法尝试获取它。如果抛出异常,那么它就不存在。

听起来是个好主意。在静态XUL文件中可以执行的任何操作都可以通过使用DOM函数创建XUL窗口的内容(包括
preferences.XUL
的内容,不管它们是什么)来动态执行。就默认值而言,如果尚未设置任何值,则可以在浏览器启动时使用preferences API手动设置默认值。您可以使用来处理更改后的
配置文件
通知。使用检查Pref是否已经设置了值,如果没有,则将其设置为您选择的默认值


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

感谢您提供有关使用首选项API设置首选项的建议。我试试看。在您做出响应之前,我已经通过使用JSON将包含首选项的数组保存为字符串来接近工作状态,但是能够将它们保存为单个首选项应该更简洁。在更改通知后使用概要文件来初始化首选项是否重要?我的扩展有一个init()函数,该函数由“load”事件侦听器调用,因此我考虑在其中设置首选项。我必须了解更多关于在更改通知后进行概要文件扩展的信息。为了防止以后有人看到这一点,我将所有的首选项存储为字符串数组,字符串数组存储为主扩展对象中的字段。然后我编写了一个函数来循环这个数组,并为每个id为的字符串创建所有必要的XUL,该字符串使用该字符串形成,并将prefpane的OnPanelLoad设置为这个函数。另一个函数在数组上循环,如果未设置,则将每个pref设置为init()中的默认值。请注意,每次打开新窗口时都会调用init()。我想,如果你只是检查缺少的值,这并不重要。因此,更改后的配置文件可能更正确,但您的解决方案足够好。感谢您的帮助。我将尝试在更改后切换到使用配置文件,但我不太理解您链接到的页面所描述的内容。不过,我会在一个新问题中询问这一点。感谢您提供有关使用首选项API设置首选项的建议。我试试看。在您做出响应之前,我已经通过使用JSON将包含首选项的数组保存为字符串来接近工作状态,但是能够将它们保存为单个首选项应该更简洁。在更改通知后使用概要文件来初始化首选项是否重要?我的扩展有一个init()函数,该函数由“load”事件侦听器调用,因此我考虑在其中设置首选项。我必须了解更多关于在更改通知后进行概要文件扩展的信息。为了防止以后有人看到这一点,我将所有的首选项存储为字符串数组,字符串数组存储为主扩展对象中的字段。然后我编写了一个函数来循环这个数组,并为每个id为的字符串创建所有必要的XUL,该字符串使用该字符串形成,并将prefpane的OnPanelLoad设置为这个函数。另一个函数在数组上循环,如果未设置,则将每个pref设置为init()中的默认值。请注意,每次打开新窗口时都会调用init()。我想,如果你只是检查缺少的值,这并不重要。因此,更改后的配置文件可能更正确,但您的解决方案足够好。感谢您的帮助。我将尝试在更改后切换到使用配置文件,但我不太理解您链接到的页面所描述的内容。不过,我会在一个新问题中问这个问题。