このサイトの機能のいくつかは JavaScript を必要とします。
« Gecko DOM リファレンス
この記事は Firefox 2 の新機能について述べています
DOM Storage とは、Web Applications 1.0 仕様で導入されたストレージに関する一連の機能に付けられた名称です。DOM Storage は Cookie の代わりとなるもので、より大容量で、より安全かつ簡単に情報を保存できるように設計されています。現在は Mozilla ベースのブラウザでのみ使用でき、その中でも Firefox 2 以降で使用できます。
DOM Storage の仕組みを利用すると、文字列のキーと値のペアを安全に保存し、後で取り出して使用することが可能になります。この機能は、長期間オフラインのまま作業ができるような高度な機能を持った対話式のアプリケーションを構築するための包括的な方法を提供することを目標として追加されたものです。
今のところ、DOM Storage 仕様を実装しており、実際に使用できるのは Mozilla ベースのブラウザのみです。ただ、Internet Explorer には複数のブラウザセッションを超えてデータを永続化できる "userData behavior" という機能があります。
ブラウザのみを使って充分な量のデータを任意の期間永続化させる良い方法は存在しないため、DOM Storage は役立つでしょう。ブラウザの Cookie には容量に制限があり、永続化されたデータを管理する方法がサポートされていませんし、Flash Local Storage などの他の方法は外部プラグインを必要とします。
新しい DOM Storage の機能 (と Internet Explorer の userData Behavior) を使った最初の公開アプリケーションの一つとして、Aaron Boodman 氏が作成した、メモを取るためのアプリケーション halfnote があります。このアプリケーションはメモをローカルの保存領域と (インターネットに接続できれば) サーバーに同時に保存します。 この方法によって、インターネットに常時接続できない環境でも、ユーザーはバックアップを取りながら安全にメモを書くことができます。
halfnote が提示したコンセプトと実装は比較的シンプルなものでしたが、これが作成されることによって、オンラインとオフラインの両方で使用可能な新しい種類の Web アプリケーションの可能性が示されました。
以下に挙げるのは、すべての window オブジェクトのプロパティとして存在するグローバルオブジェクトです。つまり、sessionStorage または window.sessionStorage のようにしてアクセスできます。 (これは重要なポイントです。なぜならこれにより、iframe を使って、そのデータがページに直接含まれているかどうかに関わらず、追加のデータを保存したりアクセスすることができるからです。)
sessionStorage sessionStorage はページセッションの間利用できるストレージを保持するグローバルオブジェクトです。ページセッションはブラウザが開かれている間だけ継続され、ページが更新されたり復元されても持続されます。ページを新しいタブやウィンドウで開くと、新しいセッションが開始されます。
// 現在のセッションの保存領域にデータを保存する sessionStorage.username = "John"; // 保存されたデータにアクセスする alert( "username = " + sessionStorage.username );
sessionStorage オブジェクトは、誤ってブラウザを更新してしまっても一時データが失われないように、そのデータを保存および復元したい場合に最も役立ちます。
sessionStorage はブラウザがクラッシュして復元された後でもデータを復元できなければなりませんが、Firefox では
bug 339445
によりまだ機能しません。このバグが解決されるまでは、sessionStorage をデータ損失の予防策として使うのには問題があります。使用例:
テキスト入力欄の内容を自動で保存します。もし誤ってブラウザを更新してしまっても、テキスト入力欄の内容が復元されるため、書いた内容が失われません。
// 値を記録するテキスト入力欄を取得
var field = document.getElementById("field");
// 自動保存された値が存在するか確認
// (ページが誤って更新された場合にのみ実行される)
if ( sessionStorage.autosave ) {
// テキスト入力欄の内容を復元
field.value = sessionStorage.autosave;
}
// テキスト入力欄の内容を 1 秒ごとにチェック
setInterval(function(){
// 取得結果を sessionStorage オブジェクトに保存
sessionStorage.autosave = field.value;
}, 1000);
詳細:
globalStorage 非標準globalStorage は、複数のページセッションやブラウザセッションにまたがるような長期間にわたってデータを保存できる、複数のプライベートなストレージ領域を保持するグローバルオブジェクトです。
// ドメイン mozilla.org にあるスクリプトのみがアクセスできるデータを保存する globalStorage['mozilla.org'].snippet = "<b>Hello</b>, how are you?";
具体的には、globalStorage オブジェクトを使うと、データの保存が可能なたくさんの異なるストレージオブジェクトへのアクセスが可能になります。たとえば、globalStorage を使用した Web ページをドメイン developer.mozilla.org に作成したとすると、以下のストレージオブジェクトが利用できます。
globalStorage['developer.mozilla.org'] - サブドメイン developer.mozilla.org にあるすべての Web ページがこのストレージオブジェクトに読み書きできる。
Firefox 2 では、現在のドキュメントよりも上位のドメイン階層のストレージオブジェクトへのアクセスが許可されていましたが、Firefox 3 ではセキュリティ上の理由により許可されなくなりました。さらに、HTML 5 仕様への globalStorage の追加案は削除され、代わりに localStorage が追加されました。こちらはまだ Firefox に実装されていません。
使用例:
以下の例を使用する場合には、実行結果を見たいページすべてにこれらのコードが書かれたスクリプトを挿入する必要があります。
ユーザーが訪れた特定のサブドメインでユーザー名を記憶させます。
globalStorage['developer.mozilla.org'].username = "John";
ユーザーがあなたのドメインにあるすべてのページを何回訪れたか記録します。
// データはすべて文字列として保存されるので parseInt が必要
globalStorage['mozilla.org'].visits =
parseInt( globalStorage['mozilla.org'].visits || 0 ) + 1;
Page last modified 15:24, 2008年6月8日 by Marsf