【问题标题】:How to reference a JScript file from another one?如何从另一个文件中引用一个 JAVAScript 文件?
【发布时间】:2011-03-04 12:24:05
【问题描述】:

我正在使用 JScript 和 WSH 编写一些服务器端脚本。脚本变得很长,一些常用函数和变量更适合我包含在各种脚本实例中的通用库脚本。

但是,我找不到从另一个引用一个 JScript 文件的方法。有一会儿,我虽然读取文件内容并将其传递给eval() 可以工作。但是,正如MSDN 所说:

请注意,在 eval 语句中定义的新变量或类型对封闭程序不可见。

有什么方法可以包含/引用另一个 JScript 文件?

【问题讨论】:

  • “请注意,在 eval 语句中定义的新变量或类型对封闭程序是不可见的。” 据我所知,至少对于 WSH 来说不是: stackoverflow.com/a/19747677/157247

标签: include javascript wsh


【解决方案1】:

尝试使用Windows Script File。它基本上是一个 XML 文档,它允许您包含多个脚本文件并定义多个作业等。

<!-- MyJob.wsf -->
<job id="IncludeExample">
  <script language="JScript" src="MyLib1.js"/>
  <script language="JScript" src="MyLib2.js"/>
  <script language="JScript">
    WScript.Echo(myLib1.foo());
    WScript.Echo(myLib2.bar());
  </script>
</job>

【讨论】:

  • 好主意,谢谢!但我想我会暂时坚持我的解决方法。似乎比 WSH 文件省事
  • 非常好!现在我只需要等到它正在运行的盒子升级。它仍在 WSH 5.7 上运行... :\ 这个功能显然只在 5.8 中实现
  • 我觉得应该注意的是,这使得没有 Visual Studio 的调试更加复杂。
【解决方案2】:

基于 Thomas 的解决方案 - 这是一种类似但更模块化的方法。一、要调用的脚本:

/* include.js */
(function () {
    var L = {/* library interface */};
    L.hello = function () {return "greetings!";};
    return L;
}).call();

然后,在调用脚本中:

var Fs = new ActiveXObject("Scripting.FileSystemObject");
var Lib = eval(Fs.OpenTextFile("include.js", 1).ReadAll());
WScript.echo(Lib.hello()); /* greetings! */

以这种方式定义的库不会产生或依赖任何上值,但eval 将返回它从库中的周围匿名函数接收到的任何值。

【讨论】:

  • 这很好用。唯一的缺点是包含的库不能导入任何系统库。如果包含的库需要系统库,则该导入语句需要在调用脚本中发生。
【解决方案3】:

好的,我找到了一个不错的解决方案:

// A object to which library functions can be attached
var library = new Object;
eval((new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile("common_script_logic.js", 1).ReadAll());

// Test use of the library
library.die("Testing library");

我创建了一个可以附加库函数的对象。这样,我可以从调用脚本访问我的库中定义的代码。不完美,但完全可以接受。

很高兴看到更合适的解决方案:-)

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多