HTML-приложения: получение параметров командной строки

Автор: Topol Воскресенье, Май 6th, 2012 Нет комментариев

Рубрика: Операционные системы

Перед вами, уважаемые читатели, очередная статья из цикла, посвящённого HTML-приложениям в Internet Explorer  (HTA). Она рассказывает, как в HTML-приложении получить параметры командной строки.

Параметры командной строки — исключительно мощная вещь. Во-первых, мы можем передавать приложению какие-либо значения уже при его запуске. Во-вторых, мы можем указать режим запуска приложения, скажем, заставить его сразу переключиться на нужное нам «окно». Часто это бывает полезно.

Поддержка параметров командной строки — один из признаков профессионально написанного приложения. Давайте же добавим эту функцию в наши HTML-приложения.

1. Получение строки запуска
Первое, что нам понадобится для реализации поддержки параметров командной строки, — получить строку запуска приложения. Строка запуска включает в себя полный путь к файлу приложения (в нашем случае — HTA-файлу) и собственно параметры командной строки, если они были указаны при его запуске.

Ещё в первой статье цикла мы рассмотрели тег <HTA:APPLICATION>, с помощью которого задаются различные параметры HTML-приложения. Этот тег создаёт невидимый элемент веб-страницы, являющийся экземпляром особого объекта (вообще, все элементы веб-страницы суть экземпляры различных объектов, составляющие объектную модель документа DOM). К сожалению, автору не удалось выяснить имя данного объекта, поэтому назовём его HTAApplication.

Объект HTAApplication поддерживает доступное только для чтения свойство commandLine. Оно хранит то, что нам нужно, — строку запуска данного приложения в строковом виде.

Примечание:
Если HTML-приложение было запущено с веб-страницы, свойство commandLine будет содержать пустую строку («»). В этом случае говорят о пустой строке запуска.

Чтобы обратиться к экземпляру объекта HTAApplication, представляющему параметры нашего приложения, нам потребуется дать имя тегу <HTA:APPLICATION> с помощью давно нам знакомого атрибута ID.

Код:
<HTA:APPLICATION ID=»hta1″ . . .>
. . .
var oHTA1 = document.getElementById(«hta1″);
var sParameters = oHTA1.commandLine;

2. Разбор строки запуска
Теперь мы можем приступить к разбору строки запуска и извлечению из неё параметров командной строки.

2.1. Из чего состоит строка запуска
Но сначала следует выяснить, что же содержится в строке запуска. Первое, что мы там увидим, — это полный путь к файлу приложения. Он находится в самом начале строки запуска и в любом случае заключается в двойные кавычки. Кроме того:

  • если приложению не были переданы параметры комнадной строки, после пути к файлу приложения будет находиться пробел;
  • если же приложения были переданы параметры командной строки, после пути к файлу приложения будут находиться уже два пробела.

Параметры командной строки (если они были переданы приложению) будут находиться далее в строке запуска, после второго из упомянутых ранее пробелов. Отдельные параметры будут отделяться друг от друга единичными пробелами.

Итак, что же нам потребуется сделать для получения параметров командной строки?

  • Сначала следует проверить, что приложение не было запущено прямо с веб-страницы. Как мы уже знаем, в этом случае строка запуска пуста.
  • Далее нам нужно извлечь из строки запуска подстроку, содержащую только параметры командной строки.
  • Напоследок останется только разбить полученную подстроку на отдельные, более мелкие, подстроки по пробелам. В результате мы получим набор строк, каждая из которых будет содержать один параметр командной строки.

Проверить, не пуста ли строка запуска, очень просто:

Код:
if (sParameters != «») {
//Строка запуска не пуста, значит, она может содержать параметры командной строки
} else {
//Строка запуска пуста, то есть приложение было запущено с веб-страницы
}

Остальные вопросы требуют более обстоятельного разговора.

2.2. Удаление из строки запуска пути к файлу приложения
Как говорилось в параграфе 2.1, путь к файлу приложения находится в самом начале строки запуска. Узнав номер символа, на котором он заканчивается, мы сможем получить извлечь из строки запуска подстроку, содержащую только параметры командной строки.

Путь к файлу приложения всегда заключается в двойные кавычки, а за ним всегда ставятся два пробела. Здесь мы рассматриваем только тот случай, когда приложению передаются параметры командной строки. Значит, заканчивается он на втором из этих конечных пробелов; следующий символ уже принадлежит первому из параметров командной строки. Нам останется узнать номер второго конечного пробела в строке запуска.

Все строковые величины в JavaScript представляются экземплярами объекта String. Этот объект поддерживает метод indexOf, который нам сейчас очень пригодится. В качестве первого параметра он принимает символ или подстроку и возвращает либо номер переданного символа в текущей строке, либо номер первого символа переданной подстроки там же. Если же такого символа или подстроки там не окажется, возвращается значение -1.

Код:
var iC = sParameters.indexOf(«\»  «);

Здесь мы передаём методу indexOf подстроку, содержащую двойные кавычки и два пробела. Если эта подстрока присутствует в строке запуска, значит, приложению были переданы параметры командной строки. В этом случае метод indexOf вернёт номер, под которым в строке запуска присутствует первый символ переданной нами подстроки (двойные кавычки). Добавив впоследствии к полученному номеру 3 — длину переданной подстроки, — мы получим номер второго пробела, то есть номер последнего символа пути к файлу приложения.

Если же переданная методу indexOf подстрока в строке запуска отсутствует, выходит, приложению не были переданы никакие параметры командной строки. Тогда метод indexOf вернёт значение -1.

Узнав номер последнего символа пути к файлу приложения, мы сможем получить подстроку, содержащую только параметры командной строки.

Чтобы извлечь подстроку из строки, мы применим метод substr объекта String. Формат его записи таков:

Код:
<строка>.substr(
<номер первого символа извлекаемой подстроки>[,
<длина извлекаемой подстроки>]
);

Первым параметром данному методу передаётся номер первого символа, который станет частью извлекаемой подстроки. Второй, необязательный, параметр задаёт длину извлекаемой подстроки в символах; если он не указан, подстрока будет содержать символы, начиная с того, чей номер указан первым параметром, и заканчивая последним символом строки. Обе эти величины указываются в виде целых чисел.

Метод substr возвращает строковое значение, содержащее извлечённую подстроку.

Код, который реализует всё это, приведён ниже.

Код:
if (iC != -1)
sParameters = sParameters.substr(iC + 3);

Здесь мы вызываем метод substr без указания второго параметра, поэтому извлекаемая подстрока будет содержать все оставшиеся символы строки запуска. В результате мы получим строковое значение, содержащее только параметры командной строки без пути к файлу приложения и ненужных пробелов.

2.3. Разбиение строки с параметрами на отдельные значения
Осталось разбить полученное в параграфе 2.2 значение, содержащую параметры командной строки, по пробелам на отдельные подстроки, каждая из которых будет содержать один параметр. Выполняется это очень просто.

Объект String поддерживает метод split. В качестве параметра он принимает строку с символом, по которому текущая строка будет разбита на подстроки (символ-разделитель). А возвращает он массив с полученными в результате разбиения подстроками, представленными как строковые значения.

Код:
var aParameters = sParameters.split(» «);

2.4. Функция, разбивающая строку запуска на отдельные параметры
Если какой-то код требуется выполнять в разных местах приложения или даже в разных приложениях, хороший программист оформит его в виде функции или метода. Давайте же напишем функцию, которая будет разбивать строку запуска на отдельные параметры.

Назовём эту функцию getParameters. В качестве единственного параметра она будет принимать строку запуска, а возвращать — массив с отдельными параметрами командной строки в виде строковых значений или null, если ни один параметр передан не был.

Код этой функции приведён ниже.

Код:
function getParameters(pParameters)
{
if (pParameters == «»)
return null
else {
sParameters = pParameters;
var iC = sParameters.indexOf(«\»  «);
if (iC == -1)
return null
else {
sParameters = sParameters.substr(iC + 3);
return sParameters.split(» «);
}
}
}

3. HTML-приложение — преобразователь величин с поддержкой параметров командной строки
Для практики давайте возьмём описанное в первой статье цикла приложение — преобразователь величин из дюймов в миллиметры и добавим ему поддержку параметров командной строки. Пусть она принимает в качестве единственного параметра величину в дюймах и сразу же при запуске преобразует её в миллиметры.

HTML-код новой версии нашего приложения приведён ниже.

Код:
<HTML>
<HEAD>
<META HTTP-EQUIV=»Content-Type» CONTENT=»text/html; charset=windows-1251″>
<TITLE>Преобразователь</TITLE>
<HTA:APPLICATION ID=»hta1″ APPLICATIONNAME=»appDronovConvertor» BORDER=»dialog»
ICON=»Convertor.ico» MAXIMIZEBUTTON=»no» SCROLL=»no» SELECTION=»no»
SINGLEINSTANCE=»yes» VERSION=»1.1″></HTA:APPLICATION>
<SCRIPT>
window.resizeTo(290, 260);

function convert()
{
var oTxtInches = document.getElementById(«txtInches»);
var oTxtMillimetres = document.getElementById(«txtMillimetres»);
var fInches = parseFloat(oTxtInches.value);
var fMillimetres = fInches * 25.4;
oTxtMillimetres.value = fMillimetres;
}

function getParameters(pParameters)
{
if (pParameters == «»)
return null
else {
sParameters = pParameters;
var iC = sParameters.indexOf(«\»  «);
if (iC == -1)
return null
else {
sParameters = sParameters.substr(iC + 3);
return sParameters.split(» «);
}
}
}

function getInches()
{
var oHTA1 = document.getElementById(«hta1″);
var oTxtInches = document.getElementById(«txtInches»);
var aParameters = getParameters(oHTA1.commandLine);
if (aParameters != null) {
oTxtInches.value = aParameters[0];
convert();
}
}
</SCRIPT>
</HEAD>
<BODY ONLOAD=»getInches();»>
<FORM>
<P>Дюймы: <INPUT TYPE=»text» ID=»txtInches»></P>
<P><INPUT TYPE=»button» VALUE=»Преобразовать» ONCLICK=»convert();»></P>
<P>Миллиметры: <INPUT TYPE=»text» ID=»txtMillimetres» READONLY></P>
<P>&nbsp;</P>
<P><INPUT TYPE=»button» VALUE=»Закрыть» ONCLICK=»window.close();»></P>
</FORM>
</BODY>
</HTML>

Никаких особых пояснений здесь не требуется — всё описано в первой статье цикла.

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты