我已经使用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];
}
});
正常工作,在第一次运行时,submitPref
和trackPref
的值始终为undefined
。如何确保脚本获得初始值?
答案 0 :(得分:1)
为什么在为它们分配任何内容之前,prefs的值是否与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;