Как ссылаться на JScript файл с другого?
Я пишу некоторые серверные скрипты, используя JScript и WSH. Сценарии становятся довольно длинными, а некоторые общие функции и переменные лучше вписываются в общую библиотеку script, которую я включил в свои различные экземпляры script.
Но я не могу найти способ ссылки на один JScript файл из другого. На мгновение я прочитал содержимое файла и передал его в eval()
. Но, как говорится в MSDN:
Обратите внимание, что новые переменные или типы, определенные в инструкции eval, не отображаются в прилагаемой программе.
Можно ли включить/связать файл JScript с другим?
Ответы
Ответ 1
Попробуйте использовать Windows Script Файл. Это в основном XML-документ, который позволяет включать в себя несколько файлов Script и, кроме всего прочего, определять несколько заданий.
<!-- 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>
Ответ 2
ОК, я нашел достойное решение:
// 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");
Я создаю объект, к которому я могу прикрепить свои библиотечные функции. Таким образом, я могу получить код, определенный в моей библиотеке, из вызывающего script. Не идеально, но вполне приемлемо.
Было бы здорово увидеть более правильное решение: -)
Ответ 3
На основе решения Томаса - здесь аналогичный, но более модульный подход. Во-первых, script для вызова (извините мой стиль кодирования):
/* include.js */
(function () {
var L = {/* library interface */};
L.hello = function () {return "greetings!";};
return L;
}).call();
Затем в вызывающем script:
var Fs = new ActiveXObject("Scripting.FileSystemObject");
var Lib = eval(Fs.OpenTextFile("include.js", 1).ReadAll());
WScript.echo(Lib.hello()); /* greetings! */
Библиотеки, определенные таким образом, не производят или не полагаются на какие-либо значения, но eval
будет возвращать любое значение, которое он получает от окружающей анонимной функции в библиотеке.