Ajaxライブラリの変遷
Ajaxライブラリが生まれた経緯
Ajaxテクノロジで開発する上で、大きな問題となることの1つは各Webブラウザ間の互換性問題です。主にInternet Explorer(以下、IE)とそれ以外のWebブラウザの仕様の違いに依存しています。
まず、Ajaxの肝となるXMLHttpRequestの呼び出し方からして異なっています。
IEの場合は、「xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");(IE7はXMLHttpRequest()でも可能)」となり、それ以外のWebブラウザでは、「xmlhttp = new XMLHttpRequest();」となります。
また、オブジェクトにイベントをアタッチするやり方も違います。
IEの場合は、「element.attachEvent('onclick', handler);」となり、それ以外のWebブラウザでは、「element.addEventListener('click', handler, false);」となります。
このように、いちいち処理ごとにWebブラウザによって処理を変えて記述していては効率が悪く、またバグの温床にもなりやすいです。そこでAjaxのライブラリを使うと、このような処理を汎用的な関数で吸収することができるようになり、Webブラウザの差異を気にすることなく実装することが可能になるのです。
さらに、Ajaxではドラッグ&ドロップで、ページ遷移なしにコンテンツの中身が書き換わるという動作が多用されます。このような挙動はHTMLのDOM(Docuument Object Model)をJavaScriptから操作することで実現しているのですが、DOMの操作は汎用的にいろいろなことが操作できる反面、実際書いてみると煩雑なコードになりがちです。
この実装もWebブラウザ間で実装が違っていたりと何かと大変なことが多いのですが、多くのAjaxライブラリはよく使う機能をより簡潔に記述できる機能を提供してくれています。
このようなAjaxライブラリがネットで出回り始め、Ajaxテクノロジの導入が進みはじめました。また、こういった普及にブログやソーシャルブックマークなどのCGMコンテンツが貢献したのも今の時代ならではといえるでしょう。このような自動的に伝染していくメディアがあって、より急速に広まっていったと考えています。
IEの実装は先進的?
たしかにバグが多く、皆を悩ませることが多いIEですが、先行実装や、独自実装したところは面白いものも多く、賛否両論分かれるところですが、筆者はIEを評価しています。
IEはほかのWebブラウザに比べてWebブラウザ上でアプリケーションを扱うことを初期のころから意識して作っています。やはり、デスクトップアプリケーションを開発している企業ならではの発想と理念があるのではないでしょうか。
いくつかIEで実装されている面白い機能で、IEに先行・独自実装された機能を見てみましょう(図1)。
特に「Expression」はCSSにJavaScriptのロジックが記述できるというまか不思議な仕様ですが、CSSのみでIEにロジックを追加できるので、ちょっとしたバグの対応に便利です。頻繁に使うのは推奨しませんが、いざというときに役に立ちます(CSSがvalidでなくなってしまいますが…)。
独自実装には否定的な意見も多いですが、標準仕様にそって作っているだけでは進化のスピードも遅くなるでしょうし、よいアイデアであれば先行して実装してしまうのもありなのではないでしょうか。
XMLHttpRequestももともとはIEの独自実装です。まさかMicrosoftもこれがここまで世界を変えるものになるとは思わなかったのではないでしょう。
そのMicrosoftもIE 8ではWeb標準に乗っ取って、より互換性の高いWebブラウザをつくると明言しています。素晴らしいことだと思いますが、個人的には標準実装だけでなくMicrosoft独自の面白い実装にも期待したいです。