jetpack.storage.simple
名前空間はブラウザの再起動をまたいでデータを永続化させるための簡単な方法を提供します。これはシンプルでキーベースの永続するオブジェクトデータの記憶域です。
Simple storage は本当に単純です。jetpack.storage.simple
は 1つの存続する JavaScript オブジェクトで、各 jetpack ごとにそれぞれプライベートなものです。ほとんど全ての場合において、このオブジェクトはそのほかの JavaScript オブジェクトと同じように振る舞い、望みうるあらゆるプロパティを設定することが出来ます。そのため、永続化されたデータを扱うのに必要とされるのは、標準の JavaScript 関数と演算子のみです。
jetpack.simple.storage
オブジェクトは自動的かつ定期的にディスクに書き出されます。どのように、いつ、書き出しが行われるかは実装にゆだねられています。しかしながら、jetpack.storage.simple.sync()
を呼び出すことにより、手動で書き出しを行う事も可能です。データは自動で読み込まれますが、jetpack.storage.simple.open()
を呼び出すことで、強制的にディスクから再読込することも可能です。これらのメソッドを乱用しないでください。これらのメソッドはディスクアクセスのために、Firefox(それも全体)が実行中の処理を中断させます。もし、これらのメソッドを頻繁に呼びすぎると、Firefox はユーザの環境によっては応答できなくなるかもしれません。あなたが変なことをするのでなければ、Jetpackがあなたのためにデータを書き出すのに任せてください。
この名前空間は現在 future に存在するため使用する前にインポートする必要があります:
jetpack.future.import("storage.simple");
sync()
前述の通り、jetpack.storage.simple
オブジェクトは自動的にディスクに書き込まれますが、jetpack.storage.simple.sync()
を呼び出すことで強制的に書き出すことも可能です。このメソッドを乱用しないでください。
open()
前述の通り、jetpack.storage.simple
オブジェクトは機能の読み込み時に自動的にデータが読み込まれますが、jetpack.storage.simple.open()
を呼び出すことでオブジェクトにディスクからの読み出しを強要することも可能です。このメソッドを乱用しないでください。
例
このコードはいくつかのデータを永続化して保存します:
jetpack.future.import("storage.simple"); var myStorage = jetpack.storage.simple; myStorage.fribblefrops = [1, 3, 3, 7]; myStorage.heimelfarbs = { bar: "baz" };
そして、このコードは(上のコードと同じjetpack内にあるものとして)単純にそのデータを利用しています:
myStorage.fribblefrops.forEach(function (elt) console.log(elt)); var bar = myStorage.heimelfarbs.bar; jetpack.notifications.show(bar.baz);
これが全てです! これらの例では jetpack.storage.simple
が単なる普通の JavaScript オブジェクトであるという事実を強調するために変数 myStorage
を作っていることに注意してください。単純に、jetpack.storage.simple
をそのまま使用することも出来ます。
実際に使われるような完全な例は以下の通りです。これはノートを取るための簡単なjetpackです。ページ内の文章を選択し、右クリックして Note を選びます。 文章はノートとして、ブラウザの再起動を跨いで保存されます。全てのノートはツールメニューに表示されます。この例は Jetpack Gallery からインストールすることが出来ます。
jetpack.future.import("menu"); jetpack.future.import("selection"); jetpack.future.import("storage.simple"); // 存在しない場合、永続化するノート達の配列を作る jetpack.storage.simple.notes = jetpack.storage.simple.notes || []; var notes = jetpack.storage.simple.notes; // Jetpackのメニューを現在のノート達で更新する。 // 全てのノート達のリストをサブメニューとして持つ Notes メニューを追加する。 // ノートが1つも存在しない場合は、 // 無効化された "(Empty)" メニューアイテムを表示する. function updateJetpackMenu() { jetpack.menu.set({ label: "Notes", menu: new jetpack.Menu(notes.length > 0 ? notes : [{ label: "(Empty)", disabled: true }]) }); } // ページのコンテキストメニューを表示される前にこっそり変更する。 // もし、選択範囲が有る場合は、新しいノートを作るための Note メニューアイテムを追加し、そうでない場合は // メニューを何も変更しない。 ノート達の数は20個に制限し、 // 古いノートは忘れてしまう。 :( jetpack.menu.context.page.beforeShow = function (menu) { menu.reset(); if (jetpack.selection.text) menu.add({ label: "Note", command: function () { notes.unshift(jetpack.selection.text); if (notes.length > 20) notes.pop(); updateJetpackMenu(); } }); }; // Initialize the Jetpack menu with the current notes. updateJetpackMenu();