Перед вами, уважаемые читатели, очередная статья из цикла, посвящённого 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-код новой версии нашего приложения приведён ниже.
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> </P>
<P><INPUT TYPE="button" VALUE="Закрыть" ONCLICK="window.close();"></P>
</FORM>
</BODY>
</HTML>[/code]
Никаких особых пояснений здесь не требуется - всё описано в первой статье цикла.
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.034 секунд (Общее время SQL: 0.014 секунд - SQL запросов: 51 - Среднее время SQL: 0.00027 секунд))