--- title: Session store API slug: Archive/Add-ons/Session_store_API tags: - Add-ons - Extensions translation_of: Archive/Add-ons/Session_store_API ---
セッションストアは、拡張機能が Firefox のセッションを通して簡単にデータの保存と復元ができるようにするための新機能です。拡張機能からセッションストア機能を利用できるようにするためのシンプルな API があります。
拡張機能からセッションストア機能を利用することが重要であるようなシナリオ例: Firefox 2 では閉じたタブを元に戻すことができます。タブの復元時にあなたの拡張機能の状態を復元するためには、セッションストア API の setTabValue() メソッドを使って、状態を復元する際に必要となる何らかのデータを保存しておく必要があります。そして、タブが復元される時、 getTabValue() メソッドを呼び出してさきほど保存したデータを取得します。
セッションストア API は nsISessionStore インターフェースを使って実装されています。
Firefoxがタブを復元しようとするとき、 SSTabRestoring 型のイベントが発生します。もしあなたの拡張機能がタブを復元するときにデータの回復を必要とするなら、以下ようなイベントリスナを追加してください:
function myExtensionHandleRestore(aEvent) {
Components.classes["@mozilla.org/consoleservice;1"].
getService(Components.interfaces.nsIConsoleService).
logStringMessage("restored");
};
document.addEventListener("SSTabRestoring", myExtensionHandleRestore, false);
関数 myExtensionHandleRestore() を、タブが復元されたときに実行したい処理によって単純に置き換えてください。この例では nsIConsoleService を使ってconsole にメッセージを表示させています。
SSTabRestoring 型イベントは、タブが復元される直前に発生します。SSTabRestored 型イベントは、個々のタブが復元されるたびに発生します。
タブが閉じられる前にタブに関連付けられたデータを更新するために、いつタブが閉じられようとしたかを検出するには、Firefox 3 以降なら、タブへ送られる "SSTabClosing" イベントを監視してください。
セッションが復元されるときに起こる処理の正確な流れは、以下のようになります:
その後、個々のタブの復元に対して以下の手順が踏まれます。
TabOpen イベントが発生します。
persistTabAttribute() の呼び出しによって保存されたデータ)や、パーミッション【訳注: 画像やスクリプトなどの許可/不許可】が復元されます。
SSTabRestoring イベントが発生します。
SSTabRestored イベントが発生します。
ページが読み込まれる前にパーミッションを変更するなどして復元対象のタブを制御したい場合、SSTabRestoring を監視します。
ページの読み込みが完了した後に何らかの処理を行いたい場合、SSTabRestored を監視します。
両方のイベントはともに、個々のタブが復元されるたびに常に発生します。イベントの originalTarget フィールドを見れば、どのタブが復元されようとしているのかを知ることができます。
まずいくつのタブの復元が必要であるかを数え、そして SSTabRestored イベントの発生回数を数えることでもしない限りは、いつ最後のタブが復元されるのかを知る由はありません。
この章では、セッションストア API の使い方のシンプルな例をいくつか示します。
次のコードでは、キー/値のペアをタブへ関連付けています【訳注: 原文は attach(取り付ける)】。これによって、タブが復元されたときにそのペアが関連付けられたままになります。
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
getService(Components.interfaces.nsISessionStore);
var currentTab = getBrowser().selectedTab;
var dataToAttach = "I want to attach this";
ss.setTabValue(currentTab, "key-name-here", dataToAttach);
このコードは、 "key-name-here" というキーに対する値を dataToAttach へセットしています。【訳注: 文字列以外にも】あらゆる JavaScript のオブジェクトをデータとして使用することができます。
タブへ関連付けられた値は、タブが復元される途中であるかどうかに関わらず、以下のようなコードによっていつでも取り出すことができます:
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
getService(Components.interfaces.nsISessionStore);
var currentTab = getBrowser().selectedTab;
var retrievedData = ss.getTabValue(currentTab, "key-name-here");
このコードを実行後、 retrievedData 変数は "key-name-here" キーに対する値を保持します。もしそのキー名に対する値が存在しなければ、 retrievedData は undefined となります。
タブから値を削除するには、以下のようなコードを使ってください:
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
getService(Components.interfaces.nsISessionStore);
var currentTab = getBrowser().selectedTab;
ss.deleteTabValue(currentTab, "key-name-here");
ウィンドウに対する値の保存と復元機能は、タブに対する機能と似たような関数名でまったく同様に動作します。