0

我正在编写一个 Firefox 插件,对于<scale>XUL 元素,onsyncfrompreference似乎没有被调用(Firefox 14)。这是我的偏好:

<preferences>
      <preference id="pref-sensitivity" name="bbaddon.sensitivity" type="string"/>
      ...
</preferences>

这是规模:

<scale min="1" max="100" increment="1" preference="pref-sensitivity"
id="bb-sensitivity"
onsynctopreference="Application.console.log('onsynctopreference called')" 
onsyncfrompreference="Application.console.log('onsyncfrompreference called')" />

日志目前仅用于调试,onsynctopreference称为没有问题,因为它显示在控制台上,但没有来自onsyncfrompreference. 我在中定义了一个默认值defaults.js

4

2 回答 2

1

如果您在 中查看此功能的实现preferences.xmlonsyncfrompreference只会为“可编辑”元素调用。至于什么被认为是“可编辑的”,你可以在下面看到。有些元素总是被认为是可编辑的,有些元素必须preference-editable="true"明确指定属性。在您的情况下,后者意味着您的修复将如下所示:

<scale min="1" max="100" increment="1" preference="pref-sensitivity"
  preference-editable="true" id="bb-sensitivity"
  onsynctopreference="Application.console.log('onsynctopreference called')" 
  onsyncfrompreference="Application.console.log('onsyncfrompreference called')" />
于 2012-08-09T07:30:39.307 回答
0

我已经使用 Javascript 解决了这个问题:

<script type="text/javascript">

var loaded = false;
//load preferences
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
         .getService(Components.interfaces.nsIPrefService)
         .getBranch("extensions.bb");
prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);

function loadpref() //call this in the prefwindow onload
{
    document.getElementById('bb-sensitivity').value = prefs.getCharPref('sensitivity');  
    loaded = true;
}

function setpref(sensitivity)
{
     if(loaded) //onchange for scale fires before onload for the window
     {
         prefs.setCharPref('sensitivity',sensitivity);
     }
}

</script>

和比例元素:

<scale min="1" max="100" increment="1" 
    preference="pref-sensitivity" 
    id="bb-sensitivity" 
    onchange="setpref(this.value);"
    />

我将暂时保留这个问题,看看是否有其他人可以提供帮助。我仍然想以“正确”的方式做到这一点。

于 2012-08-08T16:56:09.937 回答