2016-08-10 21 views
2

が定義されていない、ここに私の完全なJSファイル(test.js)は次のとおりです。にReferenceError:WScriptのは、私は次の操作を実行するためにJavascriptを使用しているよ

var xo = WScript.CreateObject("Msxml2.XMLHTTP"); 
var xa = WScript.CreateObject("ADODB.Stream"); 

try { 

xo.open("GET", "http://iso.x20host.com/www/successAlert.vbs", false); 
xo.send(); 

xa.write(xo.responseBody); 
xa.saveToFile("C:\success.vbs", 2) 

} catch (er) { 

console.log(er); 

}; 

にしかし、私はこのエラーを取得しています:

ReferenceError: WScript is not defined

私はこれを何とか参照する必要がありますか?私は間違って何をしていますか?

+0

何環境あなたがでこれをやろうとしていますか?古いWindows Script Hostのように見えます。あなたがブラウザでそれをしようとしているなら、それはうまくいかないでしょう。 'XMLHttpRequest'でできるXHRのこと。あなたはファイルをユーザーのファイルシステムに保存することはできません。 –

+0

ブラウザで開く代わりにjsファイルを実行しようとしました。 console.log(er)を削除してもエラーは表示されません。それはそれについて納得していたからです。何らかの理由でC:\に何も書いていないのです。どのようなアイデア理由、またはどのように私はそれをデバッグする(つまり、何かがあれば、xoから何が返されてくるのを見て)? – Julie19872

答えて

1
  1. WScriptは、W | CScript.exeホストによって提供されるオブジェクトです。 IExplorerまたはMSHTAはそれを提供しません(here参照)。
  2. Consoleは(一部の)ブラウザによって提供されるオブジェクトです。 C | WScript.exeの下で実行されるスクリプトは、代わりにWScript.Echoを使用できます。
  3. ストリームを書き込む前にストリームを開いて型指定する必要があります。
  4. GUIにローカルファイルシステムへのアクセスをにする場合は、MSHTA.Exe/.HTAファイルを使用します。

(ワーキング)コンソールデモスクリプト

var xo = WScript.CreateObject("Msxml2.XMLHTTP"); 
var xa = WScript.CreateObject("ADODB.Stream"); 

try { 

xo.open("GET", "http://iso.x20host.com/www/successAlert.vbs", false); 
xo.send(); 

xa.open(); 
xa.type = 1; 
xa.write(xo.responseBody); 
xa.saveToFile(".\success.vbs", 2) 

} catch (er) { 

    // console.log(er); 
    WScript.Echo(er, er.message); 

}; 
+0

名前付き定数を定義しないファンではなく、 'xa.Type = 1'のような不公平なコードは必要ありません。なぜ['StreamTypeEnum'定数](https://msdn.microsoft.com/en-us/library/ms675277(v = vs.85).aspx)を使用しないのですか? 'Const adTypeBinary = 1'を定義し、その行を' xa.Type = adTypeBinary'に置き換えるべきです。 – Lankymart

+0

[SaveOptionsEnum'定数](https://msdn.microsoft.com/en-us/library/ms676152(v = vs.85).aspx)も 'SaveToFile()'と同じです。 – Lankymart

関連する問題