AjaxにおけるXMLHttpRequesオブジェクトの取り扱い
さて、現在Webを使った技術の中で最も注目を集めているのはAjaxでしょう。このAjaxにも基本的かつ重要な場所でクロスブラウザスクリプトの技術が使われています。
Ajaxでは、ブラウザに用意されているXMLHttpRequestオブジェクトを利用してブラウザ~サーバ間の通信をおこなっています。ブラウザは、XMLHttpRequestオブジェクトを使って非同期にサーバと通信を行うことにより、リアルタイムに動的な表示の変更をおこなっています。つまり、このXMLHttpRequestオブジェクトがAjaxの要となっているのです。
以上のことより、Ajaxを使うためにはブラウザがXMLHttpRequesオブジェクトに対応している必要があります。XMLHttpRequesオブジェクトに対応しているブラウザには、次のようなものがあります。
- Internet Explorer 4.0以降
- Firefox 1.0以降
- Netscape 7.0以降
- Opera 7.6以降
- Safari 1.2以降
Ajaxを設定するには、まずはXMLHttpRequestオブジェクトをインスタンスの作成を行うことによって、使用できる状態にする必要があります。しかし、ブラウザによってその方法に以下のような違いがあります。
- Firefox、Opera、Safari、Internet Explorer 7――XMLHttpRequestオブジェクトをDOMとしてネイティブでサポート
- Internet Explorer 5.X~6.X――XMLHttpRequestオブジェクトはActiveXオブジェクトの1つとして実装
Firefoxなどでは通常のDOMの用法に従い、JavaScriptのnew演算子を使ってオブジェクト名をつけ、XMLHttpRequestオブジェクトを使用可能な状態にできます。一方、Internet Explorer 5.X~6.Xでは、ActiveXオブジェクトの特定のコンポーネントを呼び出す形になります。つまり、XMLHttpRequestオブジェクトを使えるようにするためには、DOMかActiveXオブジェクトのどちらで実装されているか判断し、それに合わせたスクリプトを実行する必要があります。
それぞれのブラウザの実装を判断し、それに合わせてXMLHttpRequestオブジェクトを使えるようにするには、次のような方法があります。これは、Microsoft Web Development Developer Centerの「About Native XMLHTTP」で紹介されている方法です。
var xmlHttp = null; if (window.XMLHttpRequest) { //IE7以上,Mozilla,Firefox,Opera,Safari //その他XMLHttpRequestオブジェクト対応ブラウザ用の処理 xmlHttp = new XMLHttpRequest(); } else { if (window.ActiveXObject) { // ActiveXを使うIE5.xやIE6用の処理 xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.3.0'); } }
XMLHttpRequestオブジェクトがDOMとして実装されているブラウザは2行目のif文の条件式window.XMLHttpRequestが真となります。if文の処理では、xmlHttp = new XMLHttpRequest()として、new演算子を使い、オブジェクト名xmlHttpとつけたXMLHttpRequestオブジェクトを作成しています。
それ以外のブラウザのうち、ActiveXオブジェクトをサポートしているブラウザは、8行目のif文の条件式window.ActiveXObjectが真となります。if文の処理ではxmlHttp = new ActiveXObject('MSXML2.XMLHTTP.3.0')とし、XMLHttpRequestオブジェクトを含んだActiveXオブジェクトのコンポーネントを読み込み、それに対し、やはりオブジェクト名xmlHttpを設定しています。
以上の処理によって、XMLHttpRequestオブジェクトをDOMでサポートしているブラウザ、ActiveXオブジェクトでサポートしているブラウザの両方で、オブジェクト名xmlHttpを使ってXMLHttpRequestオブジェクトの機能を呼び出す事ができるようになります。
この事から、XMLHttpRequesオブジェクトをサポートしているからといって、Internet Explorer 4.XをサポートしているAjaxを作成する事は非常に難しく、不可能に近いと考えていいでしょう。ほとんどのAjaxのサイトやAjaxライブラリに、Internet Explorer 4.Xのサポートが含まれていないのは、この点に原因があるものと思われます。
