Firefox' simple-prefs' onchange问​​题

时间:2015-07-27 23:17:44

标签: firefox firefox-addon firefox-addon-sdk

我正在开发一个附加组件作为Firefox的一个项目,并且无法理解" simple-prefs'的onChange方面。国防部。

目前我的附加组件必须被禁用,然后再次启用以激活任何更改。

我的代码:

set bob=bob

我的代码中的条件语句根据simple-pref设置调用不同的函数。

我的插件如何在不必禁用然后启用的情况下激活这些更改?

1 个答案:

答案 0 :(得分:1)

总结我们在评论中提出的解决方案:

1)如果您的首选项不影响加载项的状态(UI元素的可见性,样式等),并且仅影响代码对事件的反应方式,则不必使用require("sdk/simple-prefs").on()

在这种情况下,您每次处理活动时都可以通过require("sdk/simple-prefs").prefs.*从首选项中检索当前值。

2)如果您从首选项中读取值并将其存储在某个位置(在代码中的变量中,通过修改DOM或窗口小部件状态),则必须从on()处理程序正确更新它。 / p>

为了做到这一点,你必须确保你知道所有依赖于这个偏好的地方,并直接从on()处理程序更新每个地方(这可能适用于全局变量,例如)或间接(例如,通过将适当的消息传递给内容脚本)

您不应将首选项值缓存在长期存在的函数(例如tabs.on("ready", function() { var myCachedPref = ...; });)的局部变量中,因为您无法从外部处理程序更新它。您可以通过在长期函数中放置单独的pref更改处理程序 来解决这个问题:

    tabs.on("ready", function(tab) {
      var cachedPref = simplePrefs.prefs.myPref;
      simplePrefs.on("", function(prefName) {
        //update cachedPref as needed
      });
相关问题