Ajaxのクロスブラウズ

| | コメント(0) | トラックバック(0) この記事をはてなブックマークに追加

Ajaxの要であるXMLhttpRequestはもともとMicrosoftがActiveXオブジェクトとして実装したものなんですが、これにならって他のブラウザは組み込みオブジェクトとして実装されました。
IE5とIE6ではActiveXが禁止されている場合では使用できないんですが、IE7になってようやくブラウザ組み込みとして再実装されました。
実際に使う場合IE6とそれ以外のブラウザでは作法がかなり違います。(IE5は試してないのでここでは例外とします)

if(typeof window.XMLHttpRequest == "undefined"){
if(typeof window.ActiveXObject == "function"){
try {
new ActiveXObject("Msxml2.XMLHTTP");
window.XMLHttpRequest = function(){
return new ActiveXObject("Msxml2.XMLHTTP");
}
}
catch (e) {
try {
new ActiveXObject("Microsoft.XMLHTTP");
window.XMLHttpRequest = function(){
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
catch (e) {
}
}
}
}
Ajax = new window.XMLHttpRequest();

これで一応IE6でもそれ以外でも動作するXMLhttpRequestのインスタンスが作れるんですが、絶妙に不便な違いがあります。

その1. this
onreadystateプロパティに関数をセットして使うわけなんですが、セットした関数内での this が指すのはIE6では windowオブジェクトです。ActiveXオブジェクトなんだから当然といえば当然ですね。
IE6以外のブラウザでは関数を呼び出したXMLhttpRequestオブジェクト自身を指します。

その2. プロパティの追加
IE6での実体はActiveXオブジェクトなので、独自にプロパティを追加することができません。IE6以外の場合はできます。

複数のインスタンスで同時にいくつもの非同期アクセスをしようとしたらちょっと面倒くさいことをしなければならなそうです。まあそこまでたくさんのセッションを張ってアクセスしまくるのもどうかと思いますが。でも将来的にはできるように拡張性の高いライブラリを作っておいたほうがよさそうです。
それにしてもクロスブラウザは鬼門が多すぎる。誰か統一して...!

そんな感じです。
よしなに。

トラックバック(0)

このブログ記事を参照しているブログ一覧: Ajaxのクロスブラウズ

このブログ記事に対するトラックバックURL: http://www.studio-wiz.com/mt/mt-tb.cgi/81

コメントする

このブログ記事について

このページは、マピロが2008年12月 1日 16:01に書いたブログ記事です。

ひとつ前のブログ記事は「今月の『からん』『百舌谷さん逆上する』」です。

次のブログ記事は「『3月のライオン』2巻」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.14