以前、WSH/JScriptでファイルのダウンロードをする方法をメモしましたが、今回は、その非同期バージョン。HTAなんかを作ったときは、こちらの方がUIが固まらなくて便利です。

// ファイルをダウンロードする関数
function downloadFile(url, savefile, callback) {
    // HTTP通信を行うためのオブジェクト
    var http = new ActiveXObject("Msxml2.XMLHTTP");
    // コールバックを登録する
    http.onreadystatechange = function () {
      if (http.readyState == 4) {
        if (http.status == 200) {
          // バイナリファイルを保存するためのオブジェクト
          var strm = new ActiveXObject("Adodb.Stream");
          var adTypeBinary = 1, adSaveCreateOverWrite = 2;
          // 保存する
          strm.Type = adTypeBinary;
          strm.Open();
          strm.Write(http.responseBody); // 書き込み
          strm.Savetofile(savefile, adSaveCreateOverWrite); // 保存
          callback(true);
        } else {
          callback(false);
        }
      }
    };
    // URLにアクセスする
    http.open("GET", url, true);
    http.send(null); // 送信
}