Ajaxの主役オブジェクトのXMLHttpRequestを生成するときに、どうしてもブラウザ実装の違いを吸収する必要がある。
Yahoo! UI Libraryのconnection.jsの手法はなるほどという感じ。
createXhrObjectというfunction内の話ですが、まずXMLHttpRequestをnewしてみる。
http = new XMLHttpRequest();
失敗してcatchブロックに入ると、ActiveXObjectをnewして頑張ろうとする。
http = new ActiveXObject(this._msxml_progid[i]);
obj = { conn:http, tId:transactionId };
で_msxml_progidという配列分ループ(失敗したらcatchに入るのでobj変数は上書きされない)してfinallyブロックにて
return obj;
となる。
_msxml_progidは
_msxml_progid:[
‘MSXML2.XMLHTTP.5.0’,
‘MSXML2.XMLHTTP.4.0’,
‘MSXML2.XMLHTTP.3.0’,
‘MSXML2.XMLHTTP’,
‘Microsoft.XMLHTTP’
]
とありったけ定義されていると。
そのまんまなコーディングだけど、何か巧いなと思ってしまう。if-elseだらけになったりtry-catchだらけになったりせず、明瞭なコードで気持ちが良い。