Гипертекстовые приложения и 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");
};
|