Рекламное место №53


HTA: Используем JScript в гипертекстовом приложении (HTA)

 

 

Гипертекстовые приложения и JScript

Если бы JScript остался "жителем" только Веб - страниц, о нем не стоило бы и говорить. Жесточайшие ограничения модели защиты HTML страницы Интернета не позволяют получить сколько - нибудь полезную программу. Его предшественник JavaScript пытался вырваться из этих рамок - в компании Netscape был разработан "серверный" JavaScript, но широкого распространения не получил.
Поле битвы - компьютер пользователя.
Microsoft распространяет свои скриптовые движки как часть новых операционных систем. Это предоставляет программисту уникальную возможность - писать и продавать лицензионно чистое программное обеспечение на интерпретируемом языке. Так - как интерпретатор JScript уже установлен на всех компьютерах пользователей, Вам не надо просить пользователя установить "промежуточный" продукт (Вспомните мучения настройки Java программ). Ваши программы могут быть очень эффективны: всего несколько строк текста (и соответственно - малый размер установочного модуля) позволяет решать задачи весьма высокого уровня.
"Кажущееся препятствие"
Всего одно препятствие триумфу скриптовых языков кажется значимым: в языке нет развитого интерфейса ввода - вывода. Современное приложение немыслимо без оконного интерфейса, предоставляющего пользователю возможность диалога с программой!

Microsoft сняла этот барьер, предоставив новый формат файлов: HTA. Почти обычный HTML файл с таким расширением работает без ограничений защитной модели Веб, конечно, только если он запускается локально, - непосредственно с жесткого диска компьютера (двойным щелчком по файлу *.HTA). Introducing HTML Applications: DHTML Goes out of the Browser

Код JScript в HTA файле легко может осуществлять чтение и запись текстовых файлов, доступ к реестру Windows, вывод окон сообщений Windows и т. д. Правда, непосредственно эти возможности в JScript не предусмотрены. Но достаточно написать одну волшебную строку - оператор создания объекта ActiveX и все встроенные возможности объекта к Вашим услугам!

Подведем итог: Вы пишете интерфейс программы как обычную HTML страницу, и набор функций JScript, вызываемых по событию объектной модели HTML документа. Можно оформить отдельный текстовый файл для функций, как отдельный модуль - дав ему раширение .js. Ну и на закуску - HTA файл открывается в окне с одинарной рамкой - никаких меню Internet Explorer сверху - ну чем не полноценное приложение?

Пишем текстовый редактор в HTA (Весь код расположится в двух файлах:)
Вот так выглядит окно простейшего текстового редактора
..
edit.hta
edit.js
edit.hta Содержит:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<hta:application id=SimpleEditor
 applicationName=SimpleEditor
 showInTaskBar=yes
 caption=yes
 innerBorder=yes
 selection=yes
 scroll=yes
 windowstate=maximize
 contextmenu=yes />
 <title>Простейший текстовый редактор.</title>
<style>
textarea {width: 100%;}
</style>
<script src="edit.js" type="text/javascript"></script>
</head>
<body bgcolor="silver">
<form name="Main">
<textarea rows="15" name="content">
</textarea>
<input type="file" name="File1" style="visibility: hidden">
<center>
<input type="button" name="Open" value="Открыть файл" 
                                    onclick="return Open1();">
<input type="button" name="Save" value="Сохранить в файл" 
                                    onclick="return Saving();">
</center>
</form>
</body>
</html>
Файл edit.js содержит:
function Saving()
{ var fname = document.forms.Main.File1.value
  if (fname == "") return false;
  try{
  var fso   = new ActiveXObject("Scripting.FileSystemObject")
  var output = fso.OpenTextFile(fname,2,true)
  output.Write(document.forms.Main.content.value)
  output.Close()
  } catch(e) {alert("Ошибка записи в файл:" + fname)}
return true }  

function Open1()
{ document.forms.Main.File1.click()
  var fname = document.forms.Main.File1.value
  if (fname == "") return false;
  var fso   = new ActiveXObject("Scripting.FileSystemObject")
  var input = fso.OpenTextFile(fname)
  if (!input.AtEndOfStream) 
      document.forms.Main.content.value = input.ReadAll();
  input.Close()
  return true }
Посмотрите, всего 1.5 кБ - и у Вас почти что notepad!

Интерграция гипертекстовых приложений HTA и скриптов WSH (JScript & VBScrpt)

С помощью метода Run стандартного ActiveX с Progid = "WScript.Shell" можно запустить любой исполняемый файл (или документ по его расширению). Файлы .js, .vbs в системе Windows обычно связаны через механизм расширений с wscript.exe - интерпретатором скриптов подсистемы Windows Script Host.
function Button_Click()
{  // допустим привязать к onClick одной из кнопок
   // HTML формы
   var shell = new ActiveXObject("WScript.Shell");
   shell.Run("c:\\thread_1.js");
   // дочерний процесс исполняется в подсистеме WSH
   // или явно указать wscript.exe
   shell.Run("wscript.exe c:\\thread_2.js");

};
Программирование на JScript: В чем потенциал языка программирования JScript

предыдущая | содержание