WSH, VBScript и события ie
Формулировка задачи:
файл 1. vbs
...
Set IE=WScript.CreateObject("InternetExplorer.application","ie_"
...
function ie_onquit
....
End Function
--------------------------------------------------
В этом примере при событии quit в IE запускается функция ie_onquit в vbscript
А как отлавливать события например нажатие кнопки в форме в документе открытом в IE?
...
Set IE=WScript.CreateObject("InternetExplorer.application","ie_"
...
function ie_onquit
....
End Function
--------------------------------------------------
В этом примере при событии quit в IE запускается функция ie_onquit в vbscript
А как отлавливать события например нажатие кнопки в форме в документе открытом в IE?
Решение задачи: «WSH, VBScript и события ie»
textual
Листинг программы
<font color="darkblue"><i>/*******************************************************************/</i></font>
<font color="darkblue"><i>/* Имя: IEPhoneBook.js */</i></font>
<font color="darkblue"><i>/* Язык: JScript */</i></font>
<font color="darkblue"><i>/* Описание: Сценарий для работы с записной книжкой */</i></font>
<font color="darkblue"><i>/* (графический интерфейс пользователя на основе */</i></font>
<font color="darkblue"><i>/* HTML-формы). */</i></font>
<font color="darkblue"><i>/*******************************************************************/</i></font>
//Объявляем глобальные переменные
var
WshShell,
PathBook, //Путь к файлу с данными
PathHTML, //Путь к HTML-файлу с формой
XML, //Экземпляр объекта XML DOM
ie, //Экземпляр объекта InternetExplorer.Application
doc, //Экземпляр объекта Document
IsQuit, //Признак выхода из сценария
objListPersons; //Экземпляр объекта ListPersons
//Инициализируем константы для диалоговых окон
var vbInformation=<font color="darkblue"><b>64</b></font>,vbOkOnly=<font color="darkblue"><b>0</b></font>;
//Построение путей к файлам
function InitPath() {
BasePath=WshShell.CurrentDirectory+<font color="green">"\\"</font>;
//Путь к файлу с данными
PathBook=BasePath+<font color="green">"book.xml"</font>,
//Путь к файлу с HTML-формой
PathHTML=BasePath+<font color="green">"Phone.htm"</font>;
}
//Определение значения тега tgName XML-элемента obj
function GetTagVal(obj, tgName) {
var ElemList;
//Создаем коллекцию дочерних для obj элементов, которые
//задаются тегом tgName
ElemList=obj.getElementsByTagName(tgName);
//Проверяем, есть ли в коллекции ElemList элементы
<font color="blue">if</font> (ElemList.length><font color="darkblue"><b>0</b></font>)
//Возвращаем значение тега tgName
<font color="blue">return</font> ElemList.item(<font color="darkblue"><b>0</b></font>).text
<font color="blue">else</font>
<font color="blue">return</font> <font color="green">""</font>;
}
//Изменение значения тега tgName XML-элемента obj
function SetTagVal(obj, tgName, sVal) {
var ElemList,New;
//Создаем коллекцию дочерних для obj элементов, которые
//задаются тегом tgName
ElemList=obj.getElementsByTagName(tgName);
//Проверяем, есть ли в коллекции ElemList элементы
<font color="blue">if</font> (ElemList.length><font color="darkblue"><b>0</b></font>)
//Устанавливаем значениеэлемента, задаваемого
//тегом tgName
ElemList.item(<font color="darkblue"><b>0</b></font>).text=sVal;
<font color="blue">else</font> {
//Создаем новый элемент с именем tgName
NewElem=XML.createElement(tgName);
//Добавляем новый элемент в качестве дочернего для
//элемента obj
obj.appendChild(NewElem);
//Устанавливаем значение добавленного элемента
obj.lastChild.text=sVal;
}
}
//Конструктор объекта Person
function Person() {
//Инициализируем свойства объекта
this.LastName=<font color="green">""</font>;
this.Name=<font color="green">""</font>;
this.Phone=<font color="green">""</font>;
this.Street=<font color="green">""</font>;
this.House=<font color="green">""</font>;
this.App=<font color="green">""</font>;
this.Note=<font color="green">""</font>;
//Устанавливаем для метода LoadDialog указатель на
//функцию Person_LoadDialog
this.LoadDialog=Person_LoadDialog;
}
//Заполнение полей в форме для текущей записи
function Person_LoadDialog() {
//Заполняем поля ввода в форме значениями соответствующих
//свойств объекта Person
doc.all.txtLastName.value = this.LastName;
doc.all.txtName.value=this.Name;
doc.all.txtPhone.value=this.Phone;
doc.all.txtStreet.value=this.Street;
doc.all.txtHouse.value=this.House;
doc.all.txtApp.value = this.App;
doc.all.txtNote.value = this.Note;
}
//Конструктор объекта ListPersons
function ListPersons() {
// Свойства объекта
//Создаем массив PersonArr экземпляров объекта Person
this.PersonArr = new Array();
//Инициализируем номер текущей записи
this.CurRecord = <font color="darkblue"><b>0</b></font>;
//Сбрасываем признак изменения данных в форме
this.IsChanged = false;
// Методы объекта
//Устанавливаем для методов указатели на соответствующие функции
this.FileToArray=ListPersons_FileToArray;
this.SaveData=ListPersons_SaveData;
this.LoadDialog=ListPersons_LoadDialog;
this.RefreshDialog=ListPersons_RefreshDialog;
this.NextRecord=ListPersons_NextRecord;
this.PreviousRecord=ListPersons_PreviousRecord;
this.FirstRecord=ListPersons_FirstRecord;
this.FinalRecord=ListPersons_FinalRecord;
this.NewRecord=ListPersons_NewRecord;
this.DelRecord = ListPersons_DelRecord;
}
//Считывание данных из XML-файла в массив объектов Person
function ListPersons_FileToArray() {
var Root,CurrNode,i;
//Создаем объект XML DOM
XML = WScript.CreateObject(<font color="green">"Msxml.DOMDocument"</font>);
//Загружаем XML-документ из файла
XML.load(PathBook);
//Сохраняем в переменной Root ссылку на корневой элемент
//документа
Root=XML.documentElement;
//Обнуляем массив PersonArr
this.PersonArr.length=<font color="darkblue"><b>0</b></font>;
//Перебираем все дочерние элементы первого уровня вложенности
//для корневого элемента
<font color="blue">for</font> (i=<font color="darkblue"><b>1</b></font>; i<=Root.childNodes.length-<font color="darkblue"><b>1</b></font>;i++) {
//Выделяем в коллекции XML-элементов i-й элемент
CurrNode=Root.childNodes.item(i);
//Создаем новый экземпляр PersonRec объекта Person
PersonRec=new Person();
//Заполняем поля объекта PersonRec
PersonRec.LastName=GetTagVal(CurrNode,<font color="green">"LastName"</font>);
PersonRec.Name=GetTagVal(CurrNode,<font color="green">"Name"</font>);
PersonRec.Phone=GetTagVal(CurrNode,<font color="green">"Phone"</font>);
PersonRec.Street=GetTagVal(CurrNode,<font color="green">"Street"</font>);
PersonRec.House=GetTagVal(CurrNode,<font color="green">"House"</font>);
PersonRec.App=GetTagVal(CurrNode,<font color="green">"App"</font>);
PersonRec.Note=GetTagVal(CurrNode,<font color="green">"Note"</font>);
//Сохраняем объект PersonRec в массиве PersonArr
this.PersonArr[this.PersonArr.length]=PersonRec;
}
}
//Запись данных из формы в XML-файл
function ListPersons_SaveData() {
var Root,CurrNode,ElemList;
//Сохраняем в переменной Root ссылку на корневой элемент
//документа
Root=XML.documentElement;
//Сохраняем в переменной CurrNode ссылку на (CurRecord+<font color="darkblue"><b>1</b></font>)-й
//элемент Person
CurrNode=Root.childNodes.item(this.CurRecord+<font color="darkblue"><b>1</b></font>);
//Записываем данные из полей ввода формы в соответствующие
//XML-элементы, которые являются дочерними узлами
//относительно CurrNode
SetTagVal(CurrNode,<font color="green">"LastName"</font>,doc.all.txtLastName.value);
SetTagVal(CurrNode,<font color="green">"Name"</font>,doc.all.txtName.value);
SetTagVal(CurrNode,<font color="green">"Phone"</font>,doc.all.txtPhone.value);
SetTagVal(CurrNode,<font color="green">"Street"</font>,doc.all.txtStreet.value);
SetTagVal(CurrNode,<font color="green">"House"</font>,doc.all.txtHouse.value);
SetTagVal(CurrNode,<font color="green">"App"</font>,doc.all.txtApp.value);
SetTagVal(CurrNode,<font color="green">"Note"</font>,doc.all.txtNote.value);
//Сохраняем XML-файл на диске
XML.save(PathBook);
}
//Загрузка данных для текущей записи в форму
function ListPersons_LoadDialog() {
//Вызываем метод LoadDialog для объекта Person,
//который является CurRecord-м элементом массива PersonArr
this.PersonArr[this.CurRecord].LoadDialog();
}
//Обновление данных в форме
function ListPersons_RefreshDialog(IsGoTop) {
//Обнуляем массив PersonArr
this.PersonArr.length=<font color="darkblue"><b>0</b></font>;
//Заново загружаем данные из XML-файла в массив PersonArr
this.FileToArray();
<font color="blue">if</font> (IsGoTop)
//Переходим к первой записи в массиве
this.FirstRecord()
<font color="blue">else</font>
//Переходим к последней записи в массиве
this.FinalRecord();
//Загружаем в форму данные для текущей записи
this.LoadDialog();
}
//Переход к следующей записи
function ListPersons_NextRecord() {
<font color="blue">if</font> (this.CurRecord<this.personarr.length -="" <font="" color="darkblue"><b>1</b>)
//Если текущая запись не является последней, увеличиваем
//номер текущей записи
this.CurRecord++;
}
//Переход к предыдущей записи
function ListPersons_PreviousRecord() {
<font color="blue">if</font> (this.CurRecord > <font color="darkblue"><b>0</b></font>)
//Если текущая запись не является первой, уменьшаем
//номер текущей записи
this.CurRecord<font color="darkblue"><i>--;
</i></font><br> }
//Переход к первой записи
function ListPersons_FirstRecord() {
this.CurRecord = <font color="darkblue"><b>0</b></font>;
}
//Переход к последней записи
function ListPersons_FinalRecord() {
this.CurRecord = this.PersonArr.length - <font color="darkblue"><b>1</b></font>;
}
//Добавление новой записи
function ListPersons_NewRecord() {
var Root,NewElem;
//Сохраняем в переменной Root ссылку на корневой элемент
//документа
Root=XML.documentElement;
//Создаем новый элемент Person
NewElem=XML.createElement(<font color="green">"Person"</font>);
//Добавляем новый элемент в XML-файл
Root.appendChild(NewElem);
//Сохраняем XML-файл на диске
XML.save(PathBook);
//Обновлем в форме данные для последней добавленной записи
this.RefreshDialog(false);
}
//Удаление текущей записи
function ListPersons_DelRecord() {
var Root,DelNom;
//Сохраняем в переменной Root ссылку на корневой элемент
//документа
Root=XML.documentElement;
//В переменной DelNom сохраняем номер удаляемого элемента Person
DelNom=this.CurRecord+<font color="darkblue"><b>1</b></font>;
//Удаляем DelNom-й элемент Person из XML-файла
Root.removeChild(Root.childNodes.item(DelNom))
//Сохраняем XML-файл на диске
XML.save(PathBook);
//Выводим сообщение о том, что запись удалена
WshShell.Popup(<font color="green">"Запись N "</font>+DelNom+<font color="green">" удалена"</font>,<font color="darkblue"><b>0</b></font>,<font color="green">"Информация"</font>,
vbInformation+vbOkOnly);
//Обновлем в форме данные для первой записи
this.RefreshDialog(true);
}
// Обработчики событий Internet Explorer<font color="green">'a
//Функция-обработчик окончания загрузки документа в Internet Explorer
function ie_DocumentComplete() {
//Создаем экземпляр objListPersons объекта ListPersons
objListPersons = new ListPersons();
//Загружаем данные из XML-файла в массив PersonArr
objListPersons.FileToArray();
//Получаем ссылку на объект Document
doc = ie.Document;
//Устанавливаем заголовок окна
doc.title = "Редактирование данных";
//Указываем функции-обработчики нажатий на кнопки формы
doc.all.btnSave.onclick=btnSave_OnClick;
doc.all.btnCancel.onclick=btnCancel_OnClick;
doc.all.btnFirst.onclick=btnFirst_OnClick;
doc.all.btnPrevious.onclick=btnPrevious_OnClick;
doc.all.btnNew.onclick=btnNew_OnClick;
doc.all.btnDelete.onclick=btnDelete_OnClick;
doc.all.btnNext.onclick=btnNext_OnClick;
doc.all.btnFinal.onclick=btnFinal_OnClick;
//Указываем функции-обработчики изменения текста в полях ввода
doc.all.txtLastName.onchange = txtBoxOnChange;
doc.all.txtName.onchange = txtBoxOnChange;
doc.all.txtPhone.onchange = txtBoxOnChange;
doc.all.txtStreet.onchange = txtBoxOnChange;
doc.all.txtHouse.onchange = txtBoxOnChange;
doc.all.txtApp.onchange = txtBoxOnChange;
doc.all.txtNote.onchange = txtBoxOnChange;
if (objListPersons.PersonArr.length < 1)
//Если в XML-файле нет данных, добавляем пустую запись
objListPersons.AddRecord();
//В качестве текущей устанавливаем первую запись
objListPersons.CurRecord = 0;
//Загружаем в форму данные из массива PersonArr
//для первой записи
objListPersons.LoadDialog();
// Делаем окно Internet Explorer'</font>а видимым
ie.Visible = true;
}
//Функция-обработчик закрытия окна Internet Explorer'а
function ie_OnQuit() {
IsQuit=true;
//Сохраняем данные из формы в XML-файле
objListPersons.SaveData();
}
// Обработчики нажатий на кнопки в форме
//Функция-обработчик нажатия на кнопку <font color="green">"Сохранить"</font>
function btnSave_OnClick() {
//Сохраняем данные из формы в XML-файле
objListPersons.SaveData();
}
//Функция-обработчик нажатия на кнопку <font color="green">"Отменить"</font>
function btnCancel_OnClick() {
//Заново загружаем данные из текущего элемента массива
//в форму
objListPersons.LoadDialog();
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Данные восстановлены"</font>;
}
//Функция-обработчик нажатия на кнопку <font color="green">"<<"</font>
function btnFirst_OnClick() {
//Проверяем, были ли сделаны изменения в форме
<font color="blue">if</font> (objListPersons.IsChanged) { //Изменения были сделаны
//Сохраняем данные в XML-файле
objListPersons.SaveData();
//Заново загружаем данные из XML-файла в массив PersonArr
objListPersons.FileToArray();
}
//Переходим к первой записи в массиве
objListPersons.FirstRecord();
//Загружаем в форму данные из массива PersonArr
//для первой записи
objListPersons.LoadDialog();
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Запись N "</font> + (objListPersons.CurRecord + <font color="darkblue"><b>1</b></font>);
}
//Функция-обработчик нажатия на кнопку <font color="green">"<"</font>
function btnPrevious_OnClick() {
//Проверяем, были ли сделаны изменения в форме
<font color="blue">if</font> (objListPersons.IsChanged){ //Изменения были сделаны
//Сохраняем данные в XML-файле
objListPersons.SaveData();
//Заново загружаем данные из XML-файла в массив PersonArr
objListPersons.FileToArray();
}
//Переходим к предыдущей записи в массиве
objListPersons.PreviousRecord();
//Загружаем в форму данные из массива PersonArr
//для текущей записи
objListPersons.LoadDialog();
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Запись N "</font> + (objListPersons.CurRecord + <font color="darkblue"><b>1</b></font>);
}
//Функция-обработчик нажатия на кнопку <font color="green">"Новая запись"</font>
function btnNew_OnClick() {
//Проверяем, были ли сделаны изменения в форме
<font color="blue">if</font> (objListPersons.IsChanged) { //Изменения были сделаны
//Сохраняем данные в XML-файле
objListPersons.SaveData();
//Заново загружаем данные из XML-файла в массив PersonArr
objListPersons.FileToArray();
}
//Добавляем новую запись в XML-файл
objListPersons.NewRecord();
//Загружаем в форму данные из массива PersonArr
//для добавленной записи
objListPersons.LoadDialog();
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Добавлена новая запись"</font>;
}
//Функция-обработчик нажатия на кнопку <font color="green">"Удалить"</font>
function btnDelete_OnClick() {
//Удаляем текущую запись из XML-файла
objListPersons.DelRecord();
//Загружаем в форму данные из массива PersonArr
//для первой записи
objListPersons.LoadDialog();
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Запись удалена"</font>;
}
//Функция-обработчик нажатия на кнопку <font color="green">">"</font>
function btnNext_OnClick() {
//Проверяем, были ли сделаны изменения в форме
<font color="blue">if</font> (objListPersons.IsChanged) { //Изменения были сделаны
//Сохраняем данные в XML-файле
objListPersons.SaveData();
//Заново загружаем данные из XML-файла в массив PersonArr
objListPersons.FileToArray();
}
//Переходим к следующей записи в массиве
objListPersons.NextRecord();
//Загружаем в форму данные из массива PersonArr
//для текущей записи
objListPersons.LoadDialog();
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Запись N "</font> + (objListPersons.CurRecord + <font color="darkblue"><b>1</b></font>);
}
//Функция-обработчик нажатия на кнопку <font color="green">">>"</font>
function btnFinal_OnClick() {
//Проверяем, были ли сделаны изменения в форме
<font color="blue">if</font> (objListPersons.IsChanged) { //Изменения были сделаны
//Сохраняем данные в XML-файле
objListPersons.SaveData();
//Заново загружаем данные из XML-файла в массив PersonArr
objListPersons.FileToArray();
}
//Переходим к последней записи в массиве
objListPersons.FinalRecord();
//Загружаем в форму данные из массива PersonArr
//для текущей записи
objListPersons.LoadDialog();
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Запись N "</font> + (objListPersons.CurRecord + <font color="darkblue"><b>1</b></font>);
}
//Функция-обработчик изменения текста в полях ввода
function txtBoxOnChange() {
//Устанавливаем признак изменения данных в форме
objListPersons.IsChanged = true;
//Выводим сообщение в заголовке окна
doc.title = <font color="green">"Редактирование данных"</font>;
}
//Основная запускная функция
function Main() {
//Создаем объект WshShell
WshShell = WScript.CreateObject(<font color="green">"WScript.Shell"</font>);
//Определяем пути к файлам
InitPath();
//Создаем объект InternetExplorer.Application с возможностью
//обработки событий этого объекта
ie = WScript.CreateObject(<font color="green">"InternetExplorer.Application"</font>, <font color="green">"ie_"</font>);
//Устанавливаем свойства объекта ie для отображения формы3
ie.AddressBar = false;
ie.FullScreen = false;
ie.MenuBar = false;
ie.Resizable = false;
ie.StatusBar = false;
ie.ToolBar = false;
//Устанавливаем размеры окна
ie.Height = <font color="darkblue"><b>300</b></font>; //Высота
ie.Width = <font color="darkblue"><b>780</b></font>; //Длина
IsQuit=false;
//Загружаем HTML-файл с формой
ie.Navigate(PathHTML);
<font color="blue">while</font> (!IsQuit)
//Приостанавливаем сценарий на <font color="darkblue"><b>0</b></font>,<font color="darkblue"><b>1</b></font> сек
WScript.Sleep(<font color="darkblue"><b>100</b></font>);
}
<font color="darkblue"><i>/******************* Начало **********************************/</i></font>
Main();
<font color="darkblue"><i>/************* Конец *********************************************/</i></font></this.personarr.length>