WSH, VBScript и события ie

Узнай цену своей работы

Формулировка задачи:

файл 1. vbs
...
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>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5