Nicholas C. Zakas is a web software engineer who specializes in user interface design and implementation for web applications using JavaScript, Dynamic HTML, CSS, XML, and XSLT.

Nicholas C. Zakas氏がNCZOnlineのLearning from XAuth: Cross-domain localStorageの記事で、XAuthで採用されている機能を紹介している。XAuthは複数のドメイン間でデータを共有するための機能を提供してくれる。氏はXAuthで採用された方法は複数の違うドメインの間で永続的にデータを共有するテクニックとして素晴らしい方法だとしており、簡単なサンプルコードも含めて説明している。

データを永続的に保存する方法としてはlocalStrageを使う方法がこれからのスタンダードになっていくとみられている。localStorageは便利な機能だが、シングルドメインに限定されている。違うドメインのデータを保持することはできない。違うドメインの間でデータを送受信する方法がないわけではなく、クロスドメインメッセージングの機能を使えばメッセージの送受信は可能になる。XAuthで採用されているのは、この2つの技術を組み合わせてデータを単一のlocalStrageに保存することを可能にするというもの。アイディアを簡単にまとめると次のとおり。

  • a) localStorageにデータを保存するためだけの目的をもったページをひとつ用意する。ほかのドメインのデータであっても、データはこのlocalStorageに保持するようにする。
  • b) データを保持したいページでは、iframeを使ってlocalStorageへの保持のみを目的としたページを開いておく。
  • c) クロスドメインメッセージングの機能を使って対象のドキュメントとiframeに開いたlocalStrage用のページの間でメッセージをやりとりする。このメッセージがiframe経由で用意したlocalStorageに保存される。

XAuthではhttp://xauth.org/server.htmlがa)に対応している。http://xauth.org/server.htmlのソースコードを見ると最小限のJavaScriptになっており、localStorageとJSONデータをやりとりする処理に特化していることを確認できる。このJavaScriptはローカルに動作するものだが、いわば「ブラウザ内で動作するlocalStrageサーバ」としての機能を果たすことになる。

これを利用する側のJavaScriptライブラリでは、最初の利用時にhttp://xauth.org/server.htmlにアクセスするiframeを生成する仕組みになっている。つまりこの段階でサーバにアクセスするパスを用意したということになる。以降はクロスドメインメッセージングの機能を使ってデータを送受信すればいい。このアイディアを可能にする技術を簡単にまとめると次のとおり。

  • iframe機能
  • localStorage機能
  • クロスドメインメッセージング機能
  • ネイティブJSONシリアライゼーション/パース機能

すべてのブラウザがこの機能をサポートしているわけではなく、動作するブラウザは次のバージョンに限定されるという。

  • IE8以降
  • Firefox 3.5以降
  • Chrome 4以降
  • Safari 4以降
  • Opera 10.5以降

しかし、こうした機能を利用すると割り切ったことでコードはすっきりとまとまっていると説明がある。