我正在制作一个firefox插件(SDK / Jetpack),并且正在使用Simple-Prefs模块。我希望在我的一个首选项中有一个数组,所以在我的package.json中我把它写成
{
[...]
"preferences":[
[...]
{
"name":"audio-priority",
"title":"Audio Priority",
"type":"string",
"value":"[\"audio-notifications\",\"audio-error\",\"audio-messages\",\"audio-youtube\",\"audio-twitch\"]",
"hidden":true
},
[...]
}
但是当我运行它时,它会构建并且浏览器会打开,但是在控制台中它会出现
console.error: ltt-notifier:
Message: SyntaxError: missing ) after argument list
Stack:
evaluate@resource://gre/modules/XPIProvider.jsm -> jar:file:///tmp/tmpn5QUOo.mozrunner/extensions/jid1-23jjnBCWPFQ3ag@jetpack.xpi!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js:223
setDefaultPrefs@resource://gre/modules/XPIProvider.jsm -> jar:file:///tmp/tmpn5QUOo.mozrunner/extensions/jid1-23jjnBCWPFQ3ag@jetpack.xpi!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/addon/runner.js:66
然后整个加载更多的东西(堆栈),并且插件没有运行。 如果我将数组更改为没有\“(或任何转义字符 - 我尝试使用\ u0022)的任何内容,它工作正常,这让我觉得它可能是一个Mozilla Bug,但它可能是我的错
答案 0 :(得分:1)
基于来自https://bugzilla.mozilla.org/show_bug.cgi?id=501156的链接(链接到https://groups.yahoo.com/neo/groups/json/conversations/topics/1286),我发现答案是它应该是
"[\\\"audio-notifications\\\",\\\"audio-error\\\",\\\"audio-messages\\\",\\\"audio-youtube\\\",\\\"audio-twitch\\\"]",
因为第一次对JSON进行解码时它会对“to”进行转换,但是JSON要求它仍然是\“。通过转义\以及”,第一次解析它时,整个文件得到处理,它变成
[\"audio-notifications\",\"audio-error\",\"audio-messages\",\"audio-youtube\",\"audio-twitch\"]
不再关闭引号(我认为这是一个问题,因为错误与本机代码中的evaluate命令有关),并且意味着它在解码时仍然是有效的JSON。
答案 1 :(得分:0)
如果你这样做是否有用
'["audio-notifications","audio-error","audio-messages","audio-youtube","audio-twitch"]'
或
"['audio-notifications','audio-error','audio-messages','audio-youtube','audio-twitch']"
?
如果是,您应该file a bug。