WSH with JScriptでAjax的にウェブファイルを読み込むスクリプト
久しぶりにプログラムを。
Windows Script HostのJScriptを使って、Ajax的にウェブページを読み込むことはできないかなぁと少し模索。
多少試行錯誤したけど、次で動くみたい。
//xmlhttp.js "use strict"; var done = false; var sendData = function() { var httpObj = new ActiveXObject("Msxml2.XMLHTTP.6.0"); if (httpObj) { httpObj.open("get", "http://www.ほにゃらら.com", true); //http://www.ほにゃらら.comはウェブサイトのURL httpObj.onreadystatechange = function() { if (httpObj.readyState == 4 && httpObj.status == 200) { WScript.Echo(httpObj.responseText); done = true; } } httpObj.send(null); } } sendData(); //メインループ while (done !== true) { WScript.Sleep(100); }
「メインループ」のところで空回りさせて、httpObj.onreadystatechangeトリガーが発火するまで待ってやるところが、WSH的ミソだなぁと思います。
これがないと、onreadystatechangeトリガーが発火する前にスクリプトが終了してしまい、ウェブファイルの読み込みまで待ってくれないのであります。
onreadystatechangeトリガーの発火は、「メインループ」とは別スレッドで実行されるようです。
onreadystatechangeトリガーが発火し、処理が終了したら、別スレッドで動いている「メインループ」に、共有メモリ上の done フラグを経由して処理終了を教えてやる必要があります。