【问题标题】:ReferenceError: WScript is not definedReferenceError:未定义 WScript
【发布时间】:2016-08-11 04:59:07
【问题描述】:

我希望使用 Javascript 来执行以下操作,这是我的完整 JS 文件 (test.js):

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 未定义

我需要以某种方式引用这个吗?我做错了什么?

【问题讨论】:

  • 您要在什么环境中执行此操作?看起来像旧的 Windows 脚本主机的东西。如果您尝试在浏览器中执行此操作,它将无法正常工作。你可以用XMLHttpRequest 做的 XHR 东西。但是,您不能将文件保存到用户的文件系统中。
  • 我只是尝试运行 js 文件,而不是通过浏览器打开它。删除 console.log(er); 后,我没有收到任何错误消息;行,因为它对此感到不满。出于某种原因,它不会像那样向 C:\ 写入任何内容。知道为什么,或者我将如何调试它(即查看从 xo 返回的内容,如果有的话)?

标签: javascript vbscript


【解决方案1】:
  1. WScript 是由 W|CScript.exe 主机提供的对象; IExplorer 或 MSHTA 不提供(请参阅 here)。
  2. Console是(某些)浏览器提供的对象。在 C|WScript.exe 下运行的脚本可以改用WScript.Echo
  3. 您需要先打开一个流并指定类型,然后才能对其进行写入。
  4. 如果您想要 GUI访问本地文件系统,请使用 MSHTA.Exe/An .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);

};

【讨论】:

  • 不喜欢不定义命名常量,不需要像xa.Type = 1 这样不友好的代码。为什么不使用StreamTypeEnum constants?应定义Const adTypeBinary = 1 并将该行替换为xa.Type = adTypeBinary
  • SaveOptionsEnum constantsSaveToFile() 也是如此。
猜你喜欢
  • 1970-01-01
  • 2012-08-24
  • 2015-10-04
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多