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.xmlを見るonsyncfrompreferenceと、「編集可能な」要素に対してのみ呼び出されます。「編集可能」と見なされるものについては、以下で確認できます。一部の要素は常に編集可能と見なされ、その他の要素は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 に答える