JavaScript

индекс
246,46

Безбраузерные приложения на Javascript (HTA)

Одна из мощнейших средств Ослика (начиная с пятой (!) версии) — HTA или HTML Application (безбраузерные приложения), позволяет создавать Windows-приложения используя HTML, CSS и Javascript/VBscript. Сразу хочу заметить, что в этой статье используется исключительно Javascript.

С точки зрения пользователя, созданная «программа» ничем, кроме расширения (*.hta), не отличается от любой другой программы: заголовок окна, иконка, отображение на панели задач, а самое главное никаких предупреждений при доступе к файлам компьютера. При всем этом вам не придется устанавливать никаких отдельных приложений или плагинов, достаточно Internet Explorer-а!



Далее представлен код простой HTA-программы. Скопируйте его в любой текстовый редактор, перед сохранением обязательно проверьте все кавычки сгенерированные хабра-редактором, и «HTA:Application» напишите слитно без пробелов (т.к. хабра-редактор ставит пробел после двоеточия)! Далее сохраните с расширением *.hta и запустите.

ВНИМАНИЕ! Пробел или перевод строки перед обратным слешем «/>» тоже обязателен!

<html><head><title>
моя программа</title>
<hta:application id=myHta
applicationName=myApp />
</head>
<body bgcolor=buttonface
style="border: none;
font: 8pt sans-serif"
scroll=no text=buttontext>
Hello world!
</body></html>


Разница всего лишь в одном теге заголовка <HTA:Application… />, и в расширении *.hta. А каков результат?

Параметры тега HTA:Application позволяют управлять видом созданным приложения. Если тег и/или параметры не заданы, то значения параметров назначаются по-умолчанию.

Параметр в HTML в JScript Значение(я)
(по умолчанию)
Обозначение
APPLICATIONNAME applicationName строка
(нет)
Уникальное имя приложения.
INNERBORDER innerBorder yes, no
(yes)
Наличие внутреннего бордюра.
BORDERSTYLE borderStyle normal, complex, raised, static, sunken
(normal)
Внутренний тип бордюра.
BORDER border thick, dialog, thin, none
(thick)
Наружный тип бордюра.
CAPTION caption yes, no
(yes)
Наличие заголовка.
Нет commandLine Только для чтения.
(полный путь к данному «*.hta»)
Содержимое командной строки.
CONTEXTMENU contextMenu yes, no
(yes)
Контекстное меню при клике правой кнопкой мыши.
SELECTION selection yes, no
(yes)
Возможность выделения текста внутри HTA.
ICON icon URL
(нет)
Путь к иконке (*.ico).
MAXIMIZEBUTTON maximizeButton yes, no
(yes)
Наличие кнопки «развернуть».
MINIMIZEBUTTON minimizeButton yes, no
(yes)
Наличие кнопки «свернуть».
SCROLL scroll yes, no, auto
(yes)
Наличие скроллинга.
SCROLLFLAT (IE 5.5+) scrollFlat yes, no
(no)
Cтиль скроллинга.
SHOWINTASKBAR showInTaskBar yes, no
(yes)
Отображение в панели задач.
SINGLEINSTANCE singleInstance yes, no
(no)
Запретить запуск второго экземпляра.
SYSMENU sysMenu yes, no
(нет)
Наличие системного меню.
VERSION version строка
(нет)
Версия HTA.
WINDOWSTATE windowState normal, minimize, maximize
(normal)
Начальное состояние окна.
NAVIGABLE (IE 5.5+) navigable yes, no
(no)
Переход по ссылке произойдет в окне HTA.


Примечание:
Если не указать параметр BORDER или указать BORDER=«thick», то размеры окна программы можно будет изменять при помощи мыши, в остальных же случаях (BORDER = thin || dialog || none), — размеры окна изменить нельзя.


Как вы видете, MS-овцы забыли добавить самые, по-моему, нужные параметры типа: winWidth, winHeight, winPositionX и winPositionY. Но это можно вылечить самим.

В примере, я постараюсь показать тот минимум, чтобы хотябы завлечь вас…

<html><head>
<hta:application id=hta_id
applicationName=hta_name
showInTaskBar=no
caption=no
innerBorder=no
selection=no
scroll=no
contextmenu=no />
<script language=javascript>
var winWidth=450; // ширина окна
var winHeight=120; // высота окна
// изменяем размер
window.resizeTo(winWidth, winHeight);

// окно в центр экрана
var winPosX=screen.width/2-winWidth/2;
var winPosY=screen.height/2-winHeight/2;
window.moveTo(winPosX, winPosY);
</script>
</head>
<body bgcolor=buttonface text=buttontext
style="padding: 2px; font: 8pt 'MS Sans serif'">
<div>Вглядитесь повнимательней на панель задач…
Ой, а меня, там нету...<br>
Правая кнопка мыши не работает, и текст не отмечается...<br>
Ну чем, я не программа? Хотя похожа на баннер ;).</div>
<div align=right><br>Для выхода нажмите ALT+F4.</div>
</body></html>


Сегодня на этом все.

Дополнительную информацию найдете в библиотеке MSDN.
+65
23 сентября 2008, 21:12
71

комментарии (68)

+10
shai_xylyd #
Надо же в MS придумали AJAX, а так же теперь понятно откуда растут ногу у mozilla prism и adobe air:)
+5
anticode #
ну или отчасти «Создать ярлык приложения» в Chrome.
+5
EugeneDest #
Я после знакомства с хромом, кстати, и вспомнил об этой статье, написанной мною в далеком 2002-м!
+15
david_mz #
Даже близко не лежит. Вообще, то, что сделано в Хроме — это банальный запуск Хрома в окошке без оформления. Вообще непонятно, из-за чего сыр-бор. Мозилловская Призма, например, выделяет на каждое такое «приложение» свой профиль, поэтому, скажем, можно иметь несколько Gmail-окон, каждое со своим аккаунтом. На Хроме так не сделать, у него все куки общие.

А HTA — это полноценное локальное приложение, у него есть полный доступ к файловой системе и ко всем объектам ОС. Там нет «песочницы».
–4
tenzink #
Для chrome тоже можно завести несколько profile'ов и сделать ярлыки для разных аккаунтов.
+1
david_mz #
Да, но это требует хоть и несложной, но работы с бубном, в его родном интерфейсе такого функционала нет.
0
tenzink #
Насчёт работы с бубном не уверен, а вот с командной строкой пообщаться придётся:

chrome.exe -user-data-dir=«PATH_TO_NEW_PROFILE_DIR»

При этом каталог PATH_TO_NEW_PROFILE_DIR создаётся, если не существовал до этого.
Для программиста путь несложный, но для конечного пользователя неприемлемый.
+19
JStingo #
MS много чего придумала и ввела, только об этом обычно любят умалчивать.
+12
Steep #
Я бы сказал большинство об этом даже не догадывается :)
Упрощать мир до черно белых цветов: Гугл — добро, МС — зло, вообще свойственно людям :)
+4
stoune #
Просто у МС меняются приоритеты раз на два года. В определённый момент МС решила, что возможность строить веб-приложения с функционалом как у десктопа может повердить комерческим перспективам ОС и остановила разработку технологии. Потому HTA достаточно сильно ограничен, хочеш более продвинутій интерфейс нужны пользоватеьские ActiveX с новыми контролами, а учитывая изменения в модели безопасности IE для ActiveX, а ещё ораничения работы с файловой системой, то этот вариант теряет свою привлекательнсть.
HTA сейчас хорош для несложных autorun например. Основные задачи отображение HTML и обработка несложного пользовательского ввода(может например получится неплохой аналог chm справки). Делать что либо более серёзное не стоит.

Хотите аналог более функциональный HTA, тогда используйте что то на подобие Sciter www.terrainformatica.com/sciter/main.whtm
некоторые отважные первооткрыватели вскрыли МСовский htmllite, но для комерческого применения это плохой вариант. Ещё вариант с использованием Mozilla XUL Runner, но XUL лично мне не нравится, ну и мне не совсем ясно ео будущее, что то не могу найти roadmap, соверщенно точно помню что хотят отказатся в будущем от XPCOM, а вот что будет с XUL не нашол.
+3
Zitrix #
VML, XML Data Island, первая реализцаия XSLT преобразования в браузере (пусть и за счет msxml, тогда второго и ущербного), фильтры… я думаю, много чего накопать можно
+1
Stac #
например, HTML+TIME :)
0
Zitrix #
да, живой urn в неймспейсках, дас ис фантастиш! :)
+3
aps #
XSLT остальные научились делать только через 7-8 лет. XML Data Island — вообще грандиозная идея, к сожалению не нашедшая поддержки.
Имхо, когда ни один из броузеров не имел 100% поддержки стандарта условные комментарии значительно облегчили бы жизнь.
Вполне работоспособный wysiwyg был уже в ie5. В Опере wysiwyg стал нормально поддерживаться только в 8 или 9 версии. Да работает через ActiveX, но зато не виснет на документах большого объема.

Жаль только, что развитие броузера практически прекратилось после выпуска ie5.5

0
bp_2000 #
Я бы даже сказал, что в ие4 уже многое было и прекрасно работало. Помнится мне, еще в 1999 году делали проект, в котором решили не перегружать многие страницы, а только подгружать необходимые данные и обновлять на стороне клиента (а-ля AJAX), таблицы прекрасно сортировались «на лету» и т.д. и т.п. Конечно, все делалось только под ие4, нетшкаф 4 был сущим кошмаром в этом плане.
0
Zitrix #
у оперы есть встроенный wysiwyg!? я и не знал, а можете, плиз, ссылку по теме предоставить?

А XML Data Island воплощение нашло, в HTML5 есть data grid и data template. Хотя, я их не особо-то изучал и могу ошибаться.
0
aps #
>у оперы есть встроенный wysiwyg!
Встроенного нет, но сейчас более менее поддерживаются наиболее распространенные редакторы типа FCKEditor или TinyMCE. C оговоркой. Имхо невозможно редактировать большие документы со сложным форматированием. А вот в FCKEditor под IE можно, за счет того, что он использует встроенные возможности ОС.
>А XML Data Island воплощение нашло, в HTML5
Некорректно. XML Data Island поддерживался во времена, когда IE держал >97% рынка. Да и сейчас поддерживается. Но не прокатило. А HTML5 еще только в черновиках.
0
Zitrix #
ну я имел ввиду что «воплощение есть», а HTML5 будет в черновиках до 2022го :) так что можно смело сказать, что XML Data Island опередил всех лет на двадцать, кнеш, если не наступят смутные времена кросс-браузерной жизни без стандартов
2022: wiki.whatwg.org/wiki/FAQ раздел «When will HTML 5 be finished?»
+1
MOVe #
Всё новое — это несправедливо забытое старое :)
0
ha2bj #
Сильно.
0
anticode #
Хотелось бы узнать, есть ли боле-менее популярные примеры применения HTA?
+1
EugeneDest #
Мне кажется, что дальше внутреннего использования в MS это не пошло, и я считаю, что зря. Много интересного можно придумать, особенно когда есть определенные рамки при разработке сего либо.
+5
catbegemot #
Видел в качестве рассадника вирусов (типа ReadMe!.. hta)
0
mr_idiot #
Например, программка VEMoDe, которой я уже давно постоянно пользуюсь.
+3
MikeOzornin #
Они были троянами и вирусами. Не видел ни одного полезного hta :)
+1
aleks_raiden #
например многие инсталляторы, вернее то что запускается по авторану, например, вроде как инсталяторы студии и мсдна, сql сервера (было ранее точно)
0
stoune #
Инсталятор студии с 2002-й использует htmllite.
А вот например Visual Studio 2008 Training Kit это hta.
0
Banzeg #
Есть вариант Pngfix'a для IE в виде HTA
+1
Banzeg #
Прошу прощения, это HTC. Ошибся.
+2
MisterX #
В Украине есть приложение разработаное для создание отчетов и их подальшей отправки в налоговую инспекцию. Сделано чисто на HTA + JS.
+1
SolarSoul #
Сурово.
0
Zitrix #
в кросс-браузерной обстановке нет, и популярных быть не может :(
0
TeamOut #
есть аська написаная на hta
0
pietrovich #
помнится попадалось несколько троянов которые .HTA использовали, но вот так навскидку ни одного не вспомнил :(
а из того что в голове крутилось подобные технологии использует Trojan.VBS.Starter.a, но такм не HTA а HTT :«)

0
AxisPod #
инсталлеры для MSSQL на *.hta
0
leshaogonkov #
я как-то переделал так тетрис на JS
0
TNK #
я в своё время када все решали олимпиадные зедачки на паскале, я сдавал красиво оформленные hta :) жутко этим гордился! :) а ещё авторанки для дисков-файлосолянок делал hta
+4
no_smoking #
у MS много всяких интересных технологий которые так и остаются неизвестными :(
+9
ngupigop #
Уже года три использую эту возможность для написания корпоративных приложений. Очень удобная технология. И хорошо что она неизвестна — я сделал на ней неплохие деньги.
0
RodionV #
Аякс на ней работает?
т.е. хта-шное окошко возвращает содержимое?
НЛО прилетело и опубликовало эту надпись здесь
+2
catsmile #
ЩИТО??
НЛО прилетело и опубликовало эту надпись здесь
–1
catsmile #
странно, почему ms даёт ход таким open-source-ным технологиям, как html, xml, xslt, svg? там ведь тоже всего-навсего надо f3 нажать. я уже молчу про (о ужас!) клиентские vb/js-скрипты и cmd-файлы.
+1
Nikita #
Кстати в этих приложениях доступны дополнительные (по сравнению с javascript в браузере) объекты.
Скажем можно формировать и сохранять XML-файлы.

Мне однажды приходилось писать на hta анкету для маркетингового исследования, результатом заполнения был файл, который опрашиваемые отправляли по e-mail. Конечно изврат, но там была своя специфика. У людей этих профессий часто нет открытого инета и надо было сделать что-то offline.
–4
Sarry #
MS-овцы? ))
+3
Alex_At_Net #
HTA приложения для некоторых направлений весьма полезны. Я, в частности, довольно много с ними работал и есть ряд существенных недостатков.

Во-первых, необходима кросбаузерная совместимость. Т.е. надо что бы интерфейс нормально отображался в IE6 и IE7.

Во-вторых, интерфейс такого приложения сделать — это не очень тривиально. Visual средств, естественно, нет. Можно программить UI с использованием ExtJS, конечно, но ничего похожего на Visual Studio Form designer не существует.

Ну и в-третьих, крайне бедный функционал собственно скриптинга. Конечно можно использовать какой-либо ActiveX. Можно даже WMI использовать. Но сконвертировать из base64 и записать бинарный файл на диск, содержащий \0 — это проблемка еще та, я вам скажу. Отдельно можно рассмотреть асинхронный ввод/вывод информации из консольных приложений, тоже тема интересная.

Для меня, к сожалению, использовать HTA был единственный выход, потому что хотелось написать десктопное приложение, .NET на машинах может и не быть, а в связи с основной Web-направленностью, ни Delphi, ни C++ я толком не знаю и на чем еще писать GUI не представляю.

Кстати может и посоветуете что… Основная задача: простое GUI desktop приложение, которому надо обращаться к файловой системе, отправлять HTTP запросы, запускать exe-файлы, работать с COM объектами: обращаться к WMI, IIS metabase, etc. .NET не предлагать, C++, Delphi тоже. Спасибо.
+1
david_mz #
Какой-нибудь wxPython? По идее, поскольку существуют всякие py2exe, то есть шанс даже получить на выходе нормальный экзешник.
0
salvator #
>Какой-нибудь wxPython? По идее, поскольку существуют всякие py2exe, то есть шанс даже получить на выходе нормальный экзешник.

ИМХО, wxPython не очень тривиалная в изучении штука… да и тоже вменяемых кроссплатформенных GUI builders не встречал, только примочка к glade… под никсы
0
david_mz #
Вы очень сильно осложнили задачу одновременным требованием доступа COM-объектам и исключением компилируемых языков. Поэтому ничего удивительного…

На Java не смотрели?:)
0
stoune #
Кроссплатформенных GUI builders. Платные DialogBlocks, wxDesigner, безплатные VisualWx, Glade, xrced. Все перечисленные без проблем работают в Окошках. А вообще нафига вам кросплатформенность если в требованиях COM, WMI, IIS, которые на других платформах только через Wine работают, кроме IIS.
wxPython не сложнее в обучении любого современного тулкита, слишком сложен, нет проблем пользуйтесь tkinter или (Pythonwin, win32ui).

А вообще вы слишком в требованиях противоречивы, судя по всему либо не знаете чего хотите либо не определились в требованиях, но уже есть внутреннее неприятие каких-то решений того же С++, Delphi, а так же Python. Потому либо шашечки либо ехать. Компонента TProgrammer который будет писать за вас код не существует. Универсального решения для всего в жизни тоже не найдёте. Определите ч'тко круг задач, выставте приоритеты что обязательно должно поддерживатся, а что желательно, а потом можно выбирать, конечно что с учётом личных предубеждений ибо писать на том что тебе не нравится сложно, но тут нужно выбирать так чтобы и себе хорошо и проэкту не в ущерб.

Из интерпритируемых языков под перечисленные требования мощнее Python вы не найдёте, требование COM, WMI, IIS, отметает другие альтернативы.
Delphi остаётся единственной альтернативой для быстрого построения багатых десктоп-клиентов для native win32 и если для диапазона задач недостаточно Python лучшим решением останется Delphi.
Упомянутый мной Sciter SDK, позволяет создать значительно более мощные приложения чем на HTA, но тот же доступ к COM, WMI там реализуется не так просто, потому что предназначен он для других вещей.
0
m0sia #
«багатых десктоп-клиентов»
опечатка по фрейду.
0
salvator #
>Во-вторых, интерфейс такого приложения сделать — это не очень тривиально. Visual средств, естественно, нет. Можно программить UI с использованием ExtJS, конечно, но ничего похожего на Visual Studio Form designer не существует.

tof2k.com/ext/formbuilder/ не VS конечно, но интерфейсы на Ext строить очень помогает

0
stoune #
sciter SDK: www.terrainformatica.com/sciter/
Python — COM, WMI, IIS metabase доступ очень просто, GUI тоже не сложно (родной tkinter гуй, или wxPython). С помощью py2exe пакуем всё в exe без дополнительных зависимостей.
–4
Pilat #
Меня удивляет одна малость. Чем это HTA лучше Java или любого скаченного exe'шника? Java даёт контролируемую защиту, exe'шник даёт возможности, оба они имеют хорошие средства разработки и отладки. Остаются понты?
+4
catsmile #
остаётся то, что для корпоративных сиюминутных нужд можно за пять минут что-то набыдлокодить и забыть. а не тратить на дурацкую и никому не нужную задачу, поставленную каким-нибудь мудаком, час рабочего времени.
0
VasilioRuzanni #
Как по мне, так вполне себе уживаются приложения на JavaScript/Flex, написанные для Adobe AIR.
Но за упоминание такой интересной особенности спасибо, не знал!
+3
Wonder #
Я таким способом «вытащил» Лебедевский реформатор (текстовые типограф) для собственного удобства использования.

Если кому интересно:
nikitakozin.com/shared/remormator.rar
0
v_poroshok #
Вот в принципе оптимальное применение. Если уже есть реализация в JS, то зачем переписывать на другом языке, просто вытаскиваешь и работает.
+1
ainu #
Сижу и вижу летающую по воздуху идею… Сам уже третий день собираюсь писать, инфу собираю, присеры готовлю и т.д.
Даже страшно стало.
+1
ainu #
*примеры
Извините, действительно удивительная штука творится.
0
kaiuk #
Спасибо как раз щас пригодится!
0
LimeOrange #
За заметку писателям топиков: используйте тег <code> — это единственное спасение от этого чёртового Типографа.
0
LimeOrange #
*На заметку, конечно же.
0
leshaogonkov #
выше уже упоминали о «вытаскивании» скриптов
я при помощи HTC вытащил в отдельный файл тетрис на JS, наверное в Win среде самое оптимальное употребление — локализовывать веб скрипты, тем более если они под ослика заточены
НЛО прилетело и опубликовало эту надпись здесь
0
BooBSD #
При всем этом вам не придется устанавливать никаких отдельных приложений или плагинов, достаточно Internet Explorer-а!

Сначала нужно этот самый Internet Explorer установить.
0
XpySt #
Напомнило реализацию языков под WEB на .NET типа asp.NET… только всё равно не очень ясно у чего от куда ноги растут.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.