Ещё раз внимательно поизучал Ваш код.
1) Обратил внимание на то, что Вы объявляете переменные fso, ftp, f как глобальные, потому что не ставите var перед ними. Т.е они создаются не в пределах процедуры init и даже не в afterOpenDocument, а на самом глобальном уровне. Учитывая, что Frontol, видимо не выгружает среду исполнения скриптов, как я и говорил ранее, то по этой причине вы и получаете зависшие сессии, потому что эти переменные остаются в памяти. Если же сделать их объявление внутри процедуры, то они автоматически очистятся при её завершении.
2) Я бы начал вот с такого кода. К сожалению, писал без проверки, так как frontol-а пока под руками нет.
// Полифил функции удаления лишних пробелов из строки
if (!String.prototype.trim) {
(function() {
// Вырезаем BOM и неразрывный пробел
String.prototype.trim = function() {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
})();
}
// функция init() является основной и служит для привязки событий к обработчикам
function init() {
//установка обработчика для события, срабатывающего после открытия документа
frontol.addEventListener("openDocument", "afterOpenDocument", false);
}
function afterOpenDocument() {
// Путь до файла списка загрузок
var fileName = "d:\\ftp.txt",
//создаем объект считывания из фаила параметров подключения ftp
fso = new ActiveXObject("Scripting.FileSystemObject"),
// Создание объекта для загрузки данных с FTP
ftp = new ActiveXObject("Msxml2.XMLHTTP");
if(!fso.FileExists(fileName)) throw new Error('Файл списка загрузок не найден !')
// Открытие файла
var ts = fso.OpenTextFile(fileName,1),
line = '';
// Построчное чтение файла
while(!ts.AtEndOfStream){
// Считывание строки и удаление из неё пробелов и табуляций по краям текста
line = ts.ReadLine().trim();
// Если в строке хоть что-то есть, то пробуем использовать её как адрес
if(line.trim() != ''){
ftp.open('GET',line,false);
ftp.send();
// Действия с файлом - ftp.responseBody
}
}
}
3) В этот код в дальнейшем надо добавить обработчик ошибки если пользователь нажал на Cancel. Но надо понять, что сейчас скрипт будет сообщать, если этого обработчика пока нет.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !