我正在开发一个附加组件作为Firefox的一个项目,并且无法理解" simple-prefs'的onChange方面。国防部。
目前我的附加组件必须被禁用,然后再次启用以激活任何更改。
我的代码:
set bob=bob
我的代码中的条件语句根据simple-pref设置调用不同的函数。
我的插件如何在不必禁用然后启用的情况下激活这些更改?
答案 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
});