SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

クロスブラウザスクリプトの作成テクニック

ブラウザがサポートしているスクリプトを判断する 2

eventオブジェクトとXMLHttpRequesオブジェクトの取り扱い


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オブジェクトの機能を呼び出す事ができるようになります。

Internet Explorer 4.XのAjaxについて
 なお、Internet Explorer 4.XもXMLHttpRequesオブジェクトをサポートしています。しかし、Internet Explorer 4.Xが発表された当時はCSSがまだ規格化途中の段階だったため、それ以降のブラウザとは表示の方法等で違いが大きく、またgetElementByIdメソッドをサポートしていないなど、動作が異なります。
 この事から、XMLHttpRequesオブジェクトをサポートしているからといって、Internet Explorer 4.XをサポートしているAjaxを作成する事は非常に難しく、不可能に近いと考えていいでしょう。ほとんどのAjaxのサイトやAjaxライブラリに、Internet Explorer 4.Xのサポートが含まれていないのは、この点に原因があるものと思われます。
 

次のページ
Ajaxページの作成

この記事は参考になりましたか?

クロスブラウザスクリプトの作成テクニック連載記事一覧

もっと読む

この記事の著者

半場 方人(ハンバ マサヒト)

Netscape2.XでJavaScriptに初めて出合ったころ、「なぜJavaScriptの日本語の書籍が無いんだ」、とあちこちで嘆いていたら、じゃあおまえが書け、とお声がかかり、JavaScript関連の書籍を執筆するようになる。執筆に際していつも考えるのは、「JavaScript初心者だった頃の気持ちを忘れないよに」、ということ。主な著書は、「標準Webデザイン講座 JavaScript&Ajax」(翔泳社)などがある。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1774 2008/08/26 13:55

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー