явно искусственный метод
#include "File.jsx"
при большом количестве скриптов придется либо хранить большое количество фалов, либо держать все в одном файле с расстановкой меток, позиционированием в нем и пр., что также видится не очень удобным
object = {
string: "hello",
number: 123.456,
boolean: true,
array: ['a', 1, true, ['subarray', 2, false, ['subsubarray']]],
object: {key: 'value', obj: {k: 'v'}},
func: function() {alert('This function')},
'любой текст': 'кириллица'
};
// свернем наш объект в строку
str = object.toSource();
// покажем ее
alert('Serialized object\n' + str);
// запишем строку в файл
f = new File(Folder.temp.absoluteURI + '/test' + (new Date()).getTime());
f.encoding = 'utf8';
if (!f.open('w') || !f.write(str)) {
throw 'Не удалось записать файл';
}
f.close();
// удалим ссылки на объект и строку
// теперь данные хранятся только в файле
object = undefined, str = undefined;
// восстановим объект из файла
f.open('r');
restoredObject = eval(f.read());
f.close();
// выведем на консоль прочитанные элементы
for (var i in restoredObject) {
$.write(i + ':\t' + restoredObject[i] + '\n');
}
// вызов функции
restoredObject.func();
Если в процессе работы скрипта необходимо с клавиатуры ввести данные - какой инструмент для этого существует (диалог или что-то подобное)
s = prompt('Введите что-нибудь', 'здесь');
alert(s)
Как это поможет с передачей параметров?
Lib = {
sum: function(a, b) {return a + b},
diff: function(a, b) {return a - b}
}
#include "Lib.jsx"
n = parseFloat(prompt('Введите число №1', 0));
m = parseFloat(prompt('Введите число №2', 0));
alert('Сумма чисел: ' + Lib.sum(n, m) +
',\nРазность: ' + Lib.diff(n, m));
File.prototype.executeWithArguments = function(args) {
if (File.fs != 'Windows') throw 'Run this only on Windows!'
// если передан массив, то преобразуем его в строку
if (args instanceof Array) {
args = args.join(' ');
}
// скрипт-обертка
tempScript = '\
<job><script language="JScript">\
objShell = WScript.CreateObject("WScript.shell");\
objShell.Exec(\'wScript.exe "' +
this.fsName.replace(/\\/g, '/') +
'" ' + args + '\');\
</script></job>\
';
// запишем временный файл
var tempFile = new File(Folder.temp.absoluteURI + '/tmp'
+ (new Date()).getTime().toString(36) + '.wsf');
if (!tempFile.open('w') || !tempFile.write(tempScript)) {
throw 'Can not write temp file'
}
tempFile.close();
// ...и выполним его
tempFile.execute();
// подождем завершения
$.sleep(2222);
// удалим временный файл
tempFile.remove();
}
f = File.openDialog('Выберите скрипт');
if (f) {
args = prompt('Введите параметры разделяя их пробелами', 'arg1 arg2');
if (args) {
f.executeWithArguments(args);
}
}
как программно остановить скрипт?