我正在制作一个firefox插件(SDK/Jetpack),我使用Simple-Prefs模块。我想在我的首选项中有一个数组,在我的包中。我把它写成
{
[...]
"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的错误,但这可能是我的错。
根据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时,它将"转义为",但JSON要求它仍然是"。通过转义和",在第一次解析它时,当处理整个文件时,它变成
["audio-notifications","audio-error","audio-messages","audio-youtube","audio-twitch"]
不再关闭引号(我认为这是一个问题,因为错误与本机代码中的evaluate命令有关),并且意味着当它被解码时,它仍然是有效的JSON。
如果你这样做,它会起作用吗
'["audio-notifications","audio-error","audio-messages","audio-youtube","audio-twitch"]'
或
"['audio-notifications','audio-error','audio-messages','audio-youtube','audio-twitch']"
?