我正在使用JScript和WSH编写一些服务器端脚本。脚本变得越来越长,一些常见的函数和变量更适合我在各种脚本实例中包含的通用库脚本。
但是,我找不到从另一个引用一个JScript文件的方法。我暂时阅读文件内容并将其传递给eval()
可行。但是,正如它在MSDN上所说的那样:
请注意,封闭程序看不到eval语句中定义的新变量或类型。
有没有办法从另一个文件中包含/引用JScript文件?
答案 0 :(得分:10)
尝试使用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>
答案 1 :(得分:8)
好的,我找到了一个不错的解决方案:
// 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");
我创建了一个可以附加库函数的对象。这样,我可以从调用脚本到达我的库中定义的代码。不完美,但完全可以接受。
看到更合适的解决方案会很棒: - )
答案 2 :(得分:8)
基于托马斯的解决方案 - 这是一种类似但更模块化的方法。首先,要调用的脚本:
/* 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! */
以这种方式定义的库不会生成或依赖任何upvalues,但eval
将返回它从库中的周围匿名函数接收的任何值。