Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 首次运行时未发出首选项_Javascript_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Javascript 首次运行时未发出首选项

Javascript 首次运行时未发出首选项,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我已经用SDK构建了一个Firefox插件。我使用简单的prefs模块来存储2个用户首选项。问题是第一次运行脚本时不会发出首选项。这是main.js代码: var pageMod=require(“页面修改”); var数据=要求(“自身”)数据; var prefSet=require(“简单prefs”); pageMod.pageMod({ 包括:[”http://www.google.*","https://www.google.*"], contentScriptWhen:'结束',

我已经用SDK构建了一个Firefox插件。我使用简单的prefs模块来存储2个用户首选项。问题是第一次运行脚本时不会发出首选项。这是main.js代码:

var pageMod=require(“页面修改”);
var数据=要求(“自身”)数据;
var prefSet=require(“简单prefs”);
pageMod.pageMod({
包括:[”http://www.google.*","https://www.google.*"],
contentScriptWhen:'结束',
contentScriptFile:[data.url(“jquery-1.7.1.min.js”)、data.url(“trackingdetector.js”)],
onAttach:功能(工作程序)
{
//设置偏好变量
var trackPref=prefSet.prefs.trackPref;
var submitPref=prefSet.prefs.submitPref;
worker.port.emit('get-prefs',[trackPref,submitPref]);//发出初始prefs
函数onPrefChange(prefName){
worker.port.emit('prefchange',[prefName,prefSet.prefs[prefName]]);//emit pref changes
}
on(“trackPref”,onPrefChange);
on(“submitPref”,onPrefChange);
}
});
然后我在内容脚本中使用以下代码来捕获首选项:

var-trackPref;
var-submitPref;
//在此处获取首选项值
self.port.on(“get prefs”,函数(数据){
trackPref=数据[0];
submitPref=数据[1];
});
//在此处获取首选项更改
self.port.on(“prefchange”),函数(数据){
prefChange=数据[0];
prefValue=数据[1];
if(prefChange==“trackPref”){
trackPref=数据[1];
}
else if(prefChange==“submitPref”){
submitPref=数据[1];
}
});

工作正常,除了在第一次运行时,
submitPref
trackPref
的值总是
未定义
。如何确保脚本获得初始值?

为什么在分配任何内容之前,pref的值应该不同于
未定义的值?只需在
main.js的开头初始化它们:

//必要时初始化prefs
if(typeof prefSet.prefs.trackPref==“未定义”)
prefSet.prefs.trackPref=false;
if(typeof prefSet.prefs.submitPref==“未定义”)
prefSet.prefs.submitPref=false;

我不太明白。首选项都是布尔值,所以这些值不应该从插件的选项菜单中设置吗?@JonathanBeeston:好的,调整示例以使用布尔值。当然,这些pref应该从选项菜单中设置-但是扩展需要为它们设置一些初始值,否则它们将只是
未定义的
,直到用户选择一些值为止。这就是这个例子所做的,如果用户没有选择任何东西,它会设置默认值。我想我在这里问错了问题。事实上,pref是在
main.js
中定义的(并且在
package.json
中具有给定的初始值)。问题是它们没有足够快地发送到内容脚本(即使我按照您的建议在
main.js
中初始化它们)。我想这就是所谓的“异步”的意思!这就是为什么第一次运行内容脚本时,它会将首选项视为未定义的,而在后续运行时,它会将首选项视为未定义的。感谢你在这个问题上对瓦拉迪米尔的帮助,以及帮助我走到这一步的其他相关答案!