1

オンラインの 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を再起動せずにコードをデバッグする方法は?

4

1 に答える 1

3

これの根本は、SDK の意図された動作とビルダー アドオンの動作方法の混合です。

  • SDK は、アンインストール時に実際にストレージをパージします。この動作は意図されていますが、通常の UI を使用してアドオンをアンインストールすると壊れます。
  • ビルダー (実際にはヘルパー アドオン) は常に古いバージョンをアンインストールし、新しいバージョンを再インストールしてシンプル ストレージを一掃します。

シンプル ストレージ データを保持できるいくつかの回避策があります。

  • ビルダーを使用しないでください。--profiledir=PROFILEDIR
  • アドオンを更新する前に、必ずアドオンを無効にしてください ((ab) は上記の壊れた動作を使用します)。
  • simple-storageモジュールをまったく使用しないでください。LocalStorage と同様に、メイン スレッドで同期 I/O を実行することは本質的に同期であるため、パフォーマンスが大幅に低下します。いくつかの短い値しかない場合は、simple-prefs代わりにモジュールなどを介して設定を使用してください。大量のデータがある場合は、次のようなものを使用することをお勧めしますOS.File。リレーショナルなものが必要な場合は、indexed-dbまたはの使用を検討してSQLite.jsmください。OS.Fileおよび/またはには、 chrome アクセスSQLite.jsmが必要です。
于 2013-10-27T18:34:28.640 に答える