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>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д