簡體   English   中英

firefox插件:如何使用插件構建器調試簡單存儲

[英]firefox addon: how to debug simple-storage using addon builder

我正在使用在線Firefox Addon Builder( https://builder.addons.mozilla.org )來開發我的插件,而我在使用簡單存儲時遇到了一些問題。 對於下面的代碼,我在控制台上獲得相同的信息,每次運行它(使用插件構建器上的“test”選項),即,似乎沒有存儲該值:

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的情況下調試我的代碼?

其根源是SDK的預期行為和builder-addon操作方式的混合。

  • SDK將在卸載時實際清除存儲。 在使用常規UI卸載加載項時,此行為是打算但已損壞
  • 構建器(實際上是幫助程序加載項)將始終卸載舊版本並重新安裝新版本並通過執行此操作來清除簡單存儲。

有幾種解決方法可以保存簡單存儲數據

  • 不要使用構建器,而是使用帶有--profiledir=PROFILEDIR的純SDK
  • 在更新之前始終禁用加載項((ab)使用上面提到的中斷行為)。
  • 根本不要使用simple-storage模塊。 與LocalStorage一樣,它本質上是同步的,在主線程上執行同步I / O,這實際上會損害性能。 如果您只有一些短值,請使用首選項,例如通過simple-prefs模塊。 如果你有很多數據,最好使用像OS.File這樣的OS.File 如果您需要某些關系,請考慮使用indexed-dbSQLite.jsm 對於OS.File和/或SQLite.jsm ,您將需要chrome訪問權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM