|
Informationリンクチェック(非同期版)ブラウズ中の画面上の、リンク一覧を作成し別ウィンドウに表示します。 さらに、作成された各リンクへXMLHTTPリクエストを、非同期で行い結果を表示します。 //links check [async]
var objTgt=document.links;
var html="";
html+="<TABLE border='1'>";
for (var numIx=0;objTgt.length>numIx;numIx++){
html+="<TR>";
html+="<TD>"+numIx+"</TD>";
html+="<TD>"+objTgt[numIx].innerHTML+"</TD>";
html+="<TD></TD>";
html+="<TD><a href='"+objTgt[numIx]+"'target='_blank'>"+objTgt[numIx]+"</a></TD>";
html+="</TR>";
}
html+="</TABLE>";
var win = window.open();
win.document.open();
win.document.write(html);
win.document.close();
var aryXhs = new Array();
var objTgt = win.document.body.getElementsByTagName("TABLE")[0].rows;
for (var numIx=0;objTgt.length>numIx;numIx++){
try{
var strHref = objTgt[numIx].getElementsByTagName("A")[0].href;
var numPnt = strHref.lastIndexOf("#");
if (numPnt >= 0){
strHref = strHref.substring(0,numPnt);
}
aryXhs[numIx] = new ActiveXObject("Msxml2.XMLHTTP.3.0");
aryXhs[numIx].onreadystatechange = Function("readystatechange("+numIx+")");
aryXhs[numIx].open("GET",strHref,true);
aryXhs[numIx].setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT");
aryXhs[numIx].send();
}catch(e){
objTgt[numIx].cells[2].innerText=e.message;
};
};
function readystatechange(numSetXhs){
if (aryXhs[numSetXhs].readyState!=4)return;
objTgt[numSetXhs].cells[2].innerText=aryXhs[numSetXhs].status+" "+aryXhs[numSetXhs].statustext;
};
リクエスト結果の意味よく見かけるHTTPステータスは、以下の2種類だと思います。
※詳細は、MSDN status Property (IXMLHTTPRequest)や、Webサーバー側の設定を調べて見てください。 セキュリティの設定IEのセキュリティ設定により、他ドメインへのアクセスに失敗する事があります。 一概に何が原因とは、言えないのですが、「書き込みできません。」と表示される場合は、以下の設定を行うとアクセスできるようになる事を確認しています。(IE5.5,IE6) IEメニューバーの[ツール]-[インターネットオプション]-[セキュリティ]の、該当ゾーンの[レベルのカスタマイズ]により、[ドメイン間でのデータソースのアクセス]を有効にする 同期版との違い同期版は、XMLHTTP要求のレスポンスが帰って来るまで、次のステップへ進めないのに対し
つまり、サーバー側のレスポンスの遅さに煩わされる事が少なくなるという事です。 openメソッドの第3引数と、onreadystatechangeイベントの扱いがミソ。 最近、流行のAjaxは、この辺のXMLHTTPの非同期処理を上手く使っている様ですね。 |
Sponsor |