Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

15.04.2011 12:55 | dronov_va

Перед вами, уважаемые читатели, очередная статья из цикла, посвящённого 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 {
  //Строка запуска пуста, то есть приложение было запущено с веб-страницы
}

se {
//Строка запуска пуста, то есть приложение было запущено с веб-страницы
}[/code]
Остальные вопросы требуют более обстоятельного разговора.

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

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

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

[code]var iC = sParameters.indexOf("\" ");[/code]
Здесь мы передаём методу indexOf подстроку, содержащую двойные кавычки и два пробела. Если эта подстрока присутствует в строке запуска, значит, приложению были переданы параметры командной строки. В этом случае метод indexOf вернёт номер, под которым в строке запуска присутствует первый символ переданной нами подстроки (двойные кавычки). Добавив впоследствии к полученному номеру 3 - длину переданной подстроки, - мы получим номер второго пробела, то есть номер последнего символа пути к файлу приложения.

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

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

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

[code]<строка>.substr(
<номер первого символа извлекаемой подстроки>[,
<длина извлекаемой подстроки>]
);[/code]
Первым параметром данному методу передаётся номер первого символа, который станет частью извлекаемой подстроки. Второй, необязательный, параметр задаёт длину извлекаемой подстроки в символах; если он не указан, подстрока будет содержать символы, начиная с того, чей номер указан первым параметром, и заканчивая последним символом строки. Обе эти величины указываются в виде целых чисел.

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

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

[code]if (iC != -1)
sParameters = sParameters.substr(iC + 3);[/code]
Здесь мы вызываем метод substr без указания второго параметра, поэтому извлекаемая подстрока будет содержать все оставшиеся символы строки запуска. В результате мы получим строковое значение, содержащее только параметры командной строки без пути к файлу приложения и ненужных пробелов.

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

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

[code]var aParameters = sParameters.split(" ");[/code]
2.4. Функция, разбивающая строку запуска на отдельные параметры
Если какой-то код требуется выполнять в разных местах приложения или даже в разных приложениях, хороший программист оформит его в виде функции или метода. Давайте же напишем функцию, которая будет разбивать строку запуска на отдельные параметры.

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

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

[code]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(" ");
}
}
}[/code]

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

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

[code]<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>[/code]
Никаких особых пояснений здесь не требуется - всё описано в первой статье цикла.


Дополнительные материалы



dronov_va, TheVista.Ru Team
Апрель 2011

Комментарии

Комментариев нет...
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 1.106 секунд (Общее время SQL: 1.068 секунд - SQL запросов: 51 - Среднее время SQL: 0.02094 секунд))
Top.Mail.Ru