2

SDK を使用して Firefox アドオンを作成しました。simple-prefs モジュールを使用して、2 つのユーザー設定を保存しています。問題は、スクリプトの最初の実行時に設定が発行されないことです。これは main.js コードです。

var pageMod = require("page-mod");
var data = require("self").data;
var prefSet = require("simple-prefs");

pageMod.PageMod({

include: ["http://www.google.*","https://www.google.*"],
contentScriptWhen: 'end',
contentScriptFile: [data.url("jquery-1.7.1.min.js"),data.url("trackingdetector.js")],
onAttach: function(worker)
{
    // set preference variables
    var trackPref = prefSet.prefs.trackPref;
    var submitPref = prefSet.prefs.submitPref;

    worker.port.emit('get-prefs', [ trackPref, submitPref ]); // emit initial prefs

    function onPrefChange(prefName) {
        worker.port.emit('prefchange', [prefName, prefSet.prefs[prefName]]); // emit pref changes
    }
    prefSet.on("trackPref", onPrefChange);
    prefSet.on("submitPref", onPrefChange);
}
});

次に、コンテンツ スクリプトで次のコードを使用して、設定を取得します。

var trackPref;
var submitPref;

// get preference values here   
self.port.on("get-prefs", function(data) {
trackPref = data[0];
submitPref = data[1];
});

// get preference changes here
self.port.on("prefchange", function(data) {
    prefChange = data[0];
    prefValue = data[1];
    if (prefChange == "trackPref") {
        trackPref = data[1];
    }
    else if (prefChange == "submitPref") {
        submitPref = data[1];
    }
});

正常に動作します。最初の実行では、 と の値submitPreftrackPref常にundefinedです。スクリプトが初期値を確実に取得するにはどうすればよいですか?

4

1 に答える 1

1

undefined設定に何かを割り当てる前とは異なる値を設定する必要があるのはなぜですか? の先頭でそれらを初期化するだけmain.jsです:

// Initialize prefs if necessary
if (typeof prefSet.prefs.trackPref == "undefined")
  prefSet.prefs.trackPref = false;
if (typeof prefSet.prefs.submitPref == "undefined")
  prefSet.prefs.submitPref = false;
于 2012-06-25T15:47:59.570 に答える