JavaScript — это просто. Ответы на вопросы читателей
После статьи про JavaScript (КГ №42-43, 2005 г.) мной было получено (и вопросы все еще поступают) огромное количество писем от читателей. В данном материале я попытаюсь ответить на интересующие вас вопросы.
Начну с того, что мной была допущена ошибка. Во второй части статьи я рассмотрел слои, но сказал лишь, что рассмотрю их поверхностно, и привел один "сырой" пример. Я просто забыл сказать, что слои уже не применяются, а любое использование кода, связанного со слоями, в современных браузерах выдает ошибку.
Один из читателей интересуется, как вывести день недели в текстовом виде. Для этого, как помните, нужно использовать объект Date, который имеет вид DateObjectName = new Date () — получение текущей даты. А далее воспользуемся методом getDay, который возвращает день недели как целое число от 0 до 6 — соответственно от воскресенья до субботы. Но в этом случае мы получим лишь вывод в числовом виде. Для получения текстового вида дня недели я решил создать массив, содержащий названия дней недели, каждому из которых соответствует цифра из метода getDay. Таким образом, у меня получился код следующего вида:
<script language="JavaScript">
tday=new Date();
tekday=tday.getDay()
mday=new Array(7);
mday[0]="воскресенье"
mday[1]="понедельник"
mday[2]="вторник"
mday[3]="среда"
mday[4]="четверг"
mday[5]="пятница"
mday[6]="суббота"
var i=tekday
document.write(mday[i])
</script>
Еще один из читателей захотел сделать динамические обои, которые отображали бы массу дополнительной информации: объем оперативной памяти, загруженность процессора и т.п. Хочу сказать одно: делать это с помощью JavaScript не имеет смысла — этот язык не обладает такой большой функциональностью. Я вам настоятельно советую воспользоваться для этих целей другими, более "заточенными", средствами. Немного расширяют возможности языка управляющие элементов ActiveX. Эти элементы представляют собой динамические библиотеки, созданные в соответствии со стандартом COM. Component Object Model (COM) — это стандарт создания программных компонентов. По сути, платформа ActiveX — это адаптация существующих технологий Microsoft применительно к Web. ActiveX-объекты представляют собой небольшие исполняемые модули, которые могут быть внедрены в документы. Таковыми могут являться, например, документы Word или Excel. В качестве документов-контейнеров могут выступать и web-страницы (HTML). При отображении такой страницы браузер предоставляет внедренному модулю ActiveX прямоугольную область на странице. В этой области модуль может выполнять следующие функции: прорисовывать, взаимодействовать с пользователем, принимать и выводить данные и т.п. АctiveX-объекты разделяют на два вида: визуальные и невизуальные. Последние служат главным образом для доступа к определенным програмным ресурсам машины или к данным пользователя и операционной системы. Такие объекты можно сделать невидимыми на странице и обращаться к ним при помощи скриптов страницы (в нашем случае это легко сделать с помощью JavaScript). Но тут следует понимать, что скрипт на JavaScript не может напрямую обращаться ни к файлам пользователя, ни к оперативной памяти и т.д. Таким образом гарантируется безопасность пользователя, который заходит на web-страницу. А вот объекты AcitveX представляют собой исполняемые модули, которые выполняются непосредственно процессором машины и имеют равные права с другими программами компьютера. Таким образом, выполнение внедренных объектов небезопасно для пользователя. Решение проблемы безопасности Microsoft решает с помощью так называемых сертификатов безопасности. Так, каждый ActiveX объект должен иметь сертификат безопасности. И если пользователь доверяет автору объекта, то только в таком случе объект будет автоматически запускаться со страницы — иначе браузер запросит разрешения на запуск ActiveX у пользователя либо вообще откажется выполнять ActiveX (это зависит от настроек безопасности). Более подробно можно почитать тут: www.microsoft.com/activex/. Возвращаясь к языку JavaScript, можно сказать, что он дает нам гибкие возможности запуска элементов ActiveX. Для запуска этих элементов используется объект ActiveXObject. Конструктор этого объекта выглядит следующим образом: new ActiveXObject("сервер.класс"), где сервер — имя COM-сервера, класс — имя класса создаваемого объекта. После создания объекта ActiveX можно обращаться к его методам и свойствам, используя стандартный синтаксис языка JavaScript. Встроенных свойств и методов этот объект не имеет. Если возиться с тегами, атрибутами, функциями не хочется, могу предложить вам специальную программу под названием ActiveX Control Pad. В ней вы сможете строить свою страницу и размещать на ней органы управления, по большей части лишь щелкая мышью, но сценарии все равно придется писать вручную. Существует также огромное количество готовых органов управления — к примеру, таймер, всплывающее меню, информационное табло для динамического отслеживания информации (периодически скачивает информацию из файла, расположенного по заказанному адресу, и выводит ее на экран в виде бегущей строки) и многое другое.
Читатели также интересуются, как узнать информацию об исполняющей системе сценариев. Для этого я приведу пример, который показывает применение данных функций:
<script language="JavaScript">
function GetScriptEngineInfo() {
var s = "";
s += ScriptEngine() + " ";
s += ScriptEngineMajorVersion() + ".";
s += ScriptEngineMinorVersion() + ".";
s += ScriptEngineBuildVersion();
return s;
}
document.write(GetScriptEngineInfo());
</script>
Функция ScriptEngine может возвращать одну из следующих строк, указывающую на текущий сценарный язык: JScript — Microsoft JScript, VBA — Microsoft Visual Basic for Applications, VBScript — Microsoft Visual Basic Scripting Edition. Функция ScriptEngineBuildVersion возвращает строку, содержащую номер сборки (build version) исполняющей системы сценариев. Функция ScriptEngineMajorVersion возвращает строку, содержащую номер версии исполняющей системы сценариев. Функция ScriptEngineMinorVersion возвращает строку, содержащую номер подверсии исполняющей системы сценариев.
Интересует читателей и такой вопрос, как создание средствами JavaScript текстовых файлов. Для примера снова привожу пример:
<script language="JavaScript">
var newtxt, file1;
newtxt = new ActiveXObject("Scripting.FileSystemObject");
file1 = newtxt.CreateTextFile("c:\\test.txt", true);
</script>
После выполнения этого скрипта на диске C появится текстовый файл с именем text. Как видите, для этого я использую ActiveX, про который говорил выше. Советую обратится к документации по нему — это откроет для вас более широкие возможности использования JavaScript.
Следующий пример демонстрирует создание файла, запись в него текста и закрытие этого файла:
<script language="JavaScript">
var newtxt, obr;
newtxt = new ActiveXObject("Scripting.FileSystemObject");
obr = newtxt.CreateTextFile("c:\\test.txt", true);
obr.WriteLine("Первая строка для записи в файл") ;
obr.WriteBlankLines(3) ;
obr.Write ("А перед этой строкой 3 пробела");
obr.Close();
</script>
Результат выполнения этого скрипта представлен на рис. 1.
На этом пока все. Тем, кто не получил ответа на свои вопросы на странице газеты, я отвечу лично. Хочу напомнить, что мне всегда интересно ваше мнение о материалах, а также я с радостью готов по возможности ответить на все интересующие вас вопросы.
Павел Кучинский, pawelk_kg@tut.by
Начну с того, что мной была допущена ошибка. Во второй части статьи я рассмотрел слои, но сказал лишь, что рассмотрю их поверхностно, и привел один "сырой" пример. Я просто забыл сказать, что слои уже не применяются, а любое использование кода, связанного со слоями, в современных браузерах выдает ошибку.
Один из читателей интересуется, как вывести день недели в текстовом виде. Для этого, как помните, нужно использовать объект Date, который имеет вид DateObjectName = new Date () — получение текущей даты. А далее воспользуемся методом getDay, который возвращает день недели как целое число от 0 до 6 — соответственно от воскресенья до субботы. Но в этом случае мы получим лишь вывод в числовом виде. Для получения текстового вида дня недели я решил создать массив, содержащий названия дней недели, каждому из которых соответствует цифра из метода getDay. Таким образом, у меня получился код следующего вида:
<script language="JavaScript">
tday=new Date();
tekday=tday.getDay()
mday=new Array(7);
mday[0]="воскресенье"
mday[1]="понедельник"
mday[2]="вторник"
mday[3]="среда"
mday[4]="четверг"
mday[5]="пятница"
mday[6]="суббота"
var i=tekday
document.write(mday[i])
</script>
Еще один из читателей захотел сделать динамические обои, которые отображали бы массу дополнительной информации: объем оперативной памяти, загруженность процессора и т.п. Хочу сказать одно: делать это с помощью JavaScript не имеет смысла — этот язык не обладает такой большой функциональностью. Я вам настоятельно советую воспользоваться для этих целей другими, более "заточенными", средствами. Немного расширяют возможности языка управляющие элементов ActiveX. Эти элементы представляют собой динамические библиотеки, созданные в соответствии со стандартом COM. Component Object Model (COM) — это стандарт создания программных компонентов. По сути, платформа ActiveX — это адаптация существующих технологий Microsoft применительно к Web. ActiveX-объекты представляют собой небольшие исполняемые модули, которые могут быть внедрены в документы. Таковыми могут являться, например, документы Word или Excel. В качестве документов-контейнеров могут выступать и web-страницы (HTML). При отображении такой страницы браузер предоставляет внедренному модулю ActiveX прямоугольную область на странице. В этой области модуль может выполнять следующие функции: прорисовывать, взаимодействовать с пользователем, принимать и выводить данные и т.п. АctiveX-объекты разделяют на два вида: визуальные и невизуальные. Последние служат главным образом для доступа к определенным програмным ресурсам машины или к данным пользователя и операционной системы. Такие объекты можно сделать невидимыми на странице и обращаться к ним при помощи скриптов страницы (в нашем случае это легко сделать с помощью JavaScript). Но тут следует понимать, что скрипт на JavaScript не может напрямую обращаться ни к файлам пользователя, ни к оперативной памяти и т.д. Таким образом гарантируется безопасность пользователя, который заходит на web-страницу. А вот объекты AcitveX представляют собой исполняемые модули, которые выполняются непосредственно процессором машины и имеют равные права с другими программами компьютера. Таким образом, выполнение внедренных объектов небезопасно для пользователя. Решение проблемы безопасности Microsoft решает с помощью так называемых сертификатов безопасности. Так, каждый ActiveX объект должен иметь сертификат безопасности. И если пользователь доверяет автору объекта, то только в таком случе объект будет автоматически запускаться со страницы — иначе браузер запросит разрешения на запуск ActiveX у пользователя либо вообще откажется выполнять ActiveX (это зависит от настроек безопасности). Более подробно можно почитать тут: www.microsoft.com/activex/. Возвращаясь к языку JavaScript, можно сказать, что он дает нам гибкие возможности запуска элементов ActiveX. Для запуска этих элементов используется объект ActiveXObject. Конструктор этого объекта выглядит следующим образом: new ActiveXObject("сервер.класс"), где сервер — имя COM-сервера, класс — имя класса создаваемого объекта. После создания объекта ActiveX можно обращаться к его методам и свойствам, используя стандартный синтаксис языка JavaScript. Встроенных свойств и методов этот объект не имеет. Если возиться с тегами, атрибутами, функциями не хочется, могу предложить вам специальную программу под названием ActiveX Control Pad. В ней вы сможете строить свою страницу и размещать на ней органы управления, по большей части лишь щелкая мышью, но сценарии все равно придется писать вручную. Существует также огромное количество готовых органов управления — к примеру, таймер, всплывающее меню, информационное табло для динамического отслеживания информации (периодически скачивает информацию из файла, расположенного по заказанному адресу, и выводит ее на экран в виде бегущей строки) и многое другое.
Читатели также интересуются, как узнать информацию об исполняющей системе сценариев. Для этого я приведу пример, который показывает применение данных функций:
<script language="JavaScript">
function GetScriptEngineInfo() {
var s = "";
s += ScriptEngine() + " ";
s += ScriptEngineMajorVersion() + ".";
s += ScriptEngineMinorVersion() + ".";
s += ScriptEngineBuildVersion();
return s;
}
document.write(GetScriptEngineInfo());
</script>
Функция ScriptEngine может возвращать одну из следующих строк, указывающую на текущий сценарный язык: JScript — Microsoft JScript, VBA — Microsoft Visual Basic for Applications, VBScript — Microsoft Visual Basic Scripting Edition. Функция ScriptEngineBuildVersion возвращает строку, содержащую номер сборки (build version) исполняющей системы сценариев. Функция ScriptEngineMajorVersion возвращает строку, содержащую номер версии исполняющей системы сценариев. Функция ScriptEngineMinorVersion возвращает строку, содержащую номер подверсии исполняющей системы сценариев.
Интересует читателей и такой вопрос, как создание средствами JavaScript текстовых файлов. Для примера снова привожу пример:
<script language="JavaScript">
var newtxt, file1;
newtxt = new ActiveXObject("Scripting.FileSystemObject");
file1 = newtxt.CreateTextFile("c:\\test.txt", true);
</script>
После выполнения этого скрипта на диске C появится текстовый файл с именем text. Как видите, для этого я использую ActiveX, про который говорил выше. Советую обратится к документации по нему — это откроет для вас более широкие возможности использования JavaScript.
Следующий пример демонстрирует создание файла, запись в него текста и закрытие этого файла:
<script language="JavaScript">
var newtxt, obr;
newtxt = new ActiveXObject("Scripting.FileSystemObject");
obr = newtxt.CreateTextFile("c:\\test.txt", true);
obr.WriteLine("Первая строка для записи в файл") ;
obr.WriteBlankLines(3) ;
obr.Write ("А перед этой строкой 3 пробела");
obr.Close();
</script>
Результат выполнения этого скрипта представлен на рис. 1.
На этом пока все. Тем, кто не получил ответа на свои вопросы на странице газеты, я отвечу лично. Хочу напомнить, что мне всегда интересно ваше мнение о материалах, а также я с радостью готов по возможности ответить на все интересующие вас вопросы.
Павел Кучинский, pawelk_kg@tut.by
Компьютерная газета. Статья была опубликована в номере 50 за 2005 год в рубрике софт