【问题标题】:firefox addon: how to debug simple-storage using addon builderfirefox 插件:如何使用插件生成器调试简单存储
【发布时间】:2013-10-28 02:34:28
【问题描述】:

我正在使用在线 Firefox Addon Builder (https://builder.addons.mozilla.org) 来开发我的插件,但我在简单存储方面遇到了一些问题。对于下面的代码,我在控制台上得到相同的信息,每次我运行它(使用插件生成器上的“测试”选项),即,该值似乎没有被存储:

var ss = require("sdk/simple-storage");

console.log("BEFORE INIT");
console.log(JSON.stringify(ss.storage));

if (!ss.storage.pages)
    ss.storage.pages = [];

console.log("AFTER INIT");
console.log(JSON.stringify(ss.storage));

控制台:

[14:32:38.892] info: xxx: BEFORE INIT
[14:32:38.893] info: xxx: {}
[14:32:38.893] info: xxx: AFTER INIT
[14:32:38.893] info: xxx: {"pages":[]}

我认为发生这种情况是因为插件构建器在我每次运行测试时都会创建一个新的测试包,并且存储是插件私有的(显然是同一插件中的每个测试包):

[14:31:36.165] "installing from /xpi/test/2d6e6appf76kg/"
...
[14:32:36.378] "installing from /xpi/test/2d6e6appf7r40/"

我尝试重新启动 Firefox,然后它似乎可以工作(在控制台上显示正确的内容)。如何调试我的代码而无需不断重启 firefox?

【问题讨论】:

    标签: javascript firefox firefox-addon firefox-addon-sdk


    【解决方案1】:

    其根源在于 SDK 的预期行为和 builder-addon 操作方式的混合。

    • SDK 在卸载时实际上会purge 存储。这种行为是有意的,但 broken 在使用常规 UI 卸载插件时。
    • 构建器(实际上是辅助插件)将始终卸载旧版本并重新安装新版本,并通过这样做清除简单存储。

    有几种解决方法可以让您保留简单存储数据

    • 不要使用构建器,而是使用带有 --profiledir=PROFILEDIR 的普通 SDK
    • 在更新之前始终禁用插件((ab) 使用上述损坏的行为)。
    • 根本不要使用simple-storage 模块。 与LocalStorage 一样,它本质上是同步的,在主线程上执行同步I/O,这确实会损害性能。如果您只有几个短值,请使用首选项,例如通过simple-prefs 模块代替。如果你有很多数据,最好使用OS.File 之类的东西。如果你需要一些相关的东西,那么考虑使用indexed-dbSQLite.jsm。对于OS.File 和/或SQLite.jsm,您需要chrome access

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 2011-03-18
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多