Logo    
Новости мира IT Форумы Новые публикации Учебный центр Книжный магазин Реклама
CitForum    Весь CITForum на CD !!! Море(!) аналитической информации! :: CITFORUM.RU   

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Круглый стол "Конфликт менеджмента и ИТ:
от непонимания к синергии"

11 марта 2004г., Москва, "Марриотт Гранд Отель"

2.13. Приемы программирования на JavaScript

Проще всего начать изучение программирования на каком-либо языке с простых примеров, которые читатель может немедленно проверить. С подачи авторов языка С все современные книги по программированию начинаются с примера печати фразы "Hello world" в разных ее проявлениях ("Hello Java", "Hello Perl" и т.п.). Для JavaScript точного аналога такого подхода найти нельзя. Но мы попробуем проиллюстрировать на простых примерах основные приемы программирования.

Аналогом "Hello world" можно считать выдачу сообщения в отдельном окне, которое порождается при нажатии на гипертекстовую ссылку:

Пример 2.9. Программа выдачи простого предупреждения при выборе гипертекстовой ссылки. Схема URL - JavaScript

	<HTML>
	<HEAD>
	<title>Самый первый пример JavaScript</title>
	</HEAD>
	<BODY>
	<center>
	<h1>Мой первый пример JavaScript</h1>
	<hr>
	</center>
	В текст этого документа внедрена гипертекстовая ссылка
	<a href="javascript:window.alert('Do you speak English?')">
	"Don`t click here"
	</a>.
	Любопытно, что будет, если все-таки выбрать?
	</BODY>
	</HTML>

В данном примере среди текста документа расположена гипертекстовая ссылка "Don`t click here". Если ее выбрать при просмотре (кликнуть мышкой), то на экране появится окно-предупреждение с вопросом: "Do you speak English?".

Генерация этого окна осуществляется специальным методом window.alert, который выполняется при выборе гипертекстовой ссылки. Если быть более точным, то в качестве URL информационного ресурса, который следует загрузить при переходе по данной гипертекстовой ссылке, используется схема JavaScript - расширение спецификации URI для программирования сценариев просмотра гипертекстовых документов World Wide Web. В этом случае выполнение JavaScript-программы происходит при выборе гипертекстовой ссылки, а сам код программы записан как URL.

Рис. 2.1. Выполнение скрипта при выборе гипертекстовой ссылки

Добиться такого же эффекта можно и другим способом, не прибегая к новой схеме URL. Для этой цели можно использовать событие, которое генерируется программой-навигатором при выборе гипертекстовой ссылки - Click.

Пример 2.10. Программа выдачи простого предупреждения по событию Click при выборе гипертекстовой ссылки

	<HTML>
	<HEAD>
	<title>Самый первый пример JavaScript</title>
	</HEAD>
	<BODY>
	<center>
	<h1>Мой первый пример JavaScript</h1>
	<hr>
	</center>
	В текст этого документа внедрена гипертекстовая ссылка
	<a href="javascript:void(0)" onClick="window.alert('Do you speak
 	English?')">"Don`t click here"</a>. Любопытно, что будет, 
	если все-таки выбрать?
	</BODY>
	</HTML>

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

Размещение кода программы на JavaScript непосредственно в тагах HTML является обычным делом, но не всегда бывает удобным. Наиболее часто JavaScript-код выносят в специальный HTML-контейнер SCRIPT(</script>.....</script>). Для того, чтобы продемонстрировать применение этого подхода, видоизменим наш пример следующим образом:

Пример 2.11. Применение контейнера SCRIPT для размещение JavaScript-кода

	<HTML>
	<HEAD>
	<title>Самый первый пример JavaScript</title>
	<script language="JavaScript">
	<!-- Start the text of programme
	function question()
	         {
	          window.alert("Do you speak English?");
	         }
	// -->
	</script>
	</HEAD>
	<BODY>
	<center>
	<h1>Мой первый пример JavaScript</h1>
	<hr>
	</center>
	В текст этого документа внедрена гипертекстовая ссылка 
	<a href="javascript:void(0)" onClick="question()">"Don`t click 
	here"</a>. Любопытно, что будет, если все-таки выбрать?
	</BODY>
	</HTML>

Данный пример развивает применение JavaScript-кода для обработки события Click. Но только в этом случае мы не размещаем весь код обработки события в атрибуте onClick. В данный атрибут помещается только вызов функции, которая будет обрабатывать это событие. Само тело функции размещено в заголовке HTML-документа внутри тагов <script ...> и </script>

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

Различные браузеры поддерживают разные версии JavaScript, что накладывает определенные ограничения при написании сценариев JavaScript. Для того, чтобы максимально адаптировать свою программу к конкретному типу программного обеспечения, часто включают проверку версии и имени программы-браузера в JavaScript.

Пример 2.12. Получение типа программы просмотра HTML-страниц

	<HTML>
	<HEAD>
	<title>Test of Browser name</title>
	</HEAD>
	<BODY>
	<h1 align=center>Проверка имени типа браузера;</h1>
	<hr>
	Для того, чтобы получить имя вашей программы просмотра
	выберите кнопку "Browser"<br>
	<center>
	<form name=kuku>
	<input type=button name=browser value=Browser
	 onClick="window.alert(window.navigator.appName)">
	</form>
	</BODY>
	</HTML>

Данная программа в точности повторяет пример 2.10, но в окне предупреждения выдает имя программы просмотра HTML-страниц (window.navigator.appName). Вообще говоря, в простом сообщении о типе программного обеспечения большого смысла нет, но если вставить проверку данного имени в текст HTML-страницы и реализовать условную компиляцию страницы, то тогда обращение к данной конструкции JavaScript будет оправданным:

Пример 2.13. Условная генерация текста страницы по типу программы просмотра

	<HTML>
	<HEAD>
	<title>Test of Browser name</title>
	</HEAD>
	<BODY>
	<h1 align=center>Проверка имени типа браузера</h1>
	<hr>
	<script language=JavaScript>
	<!--
	if(window.navigator.appName == "Netscape")
	{
	document.write("<br><center><font color=steelblue size=+5>");
	document.write("У вас хороший навигатор.");
	document.write("</font></center>");
	}
	else
	{
	document.write("<font color=red size=+3>Необходим Netscape Navigator
 	версии 3.0 и выше.</font>");
	window.alert("Down load new version of your browser now.");
	}
	// -->
	</script>
	</BODY>
	</HTML>

В данном примере текст JаvaScript-программы размещен непосредственно в теле документа. При его загрузке, когда HTML-интерпретатор доходит до контейнера SCRIPT, вызывается JavaScript-интерпретатор. В этот момент будет проверяться условие, которое содержится в операторе if. В зависимости от результата проверки этого условия остальной текст страницы примет тот или иной вид в зависимости от типа программы просмотра. При просмотре данного документа программой отличной от Netscape Navigator будет выдано еще и окно предупреждения.

Рис.2.2. При загрузке был определен Netscape Navigator в качестве программы-браузера HTML-страниц

Вообще говоря, проверить тип программы просмотра можно на сервере протокола HTTP и передать программе просмотра уже готовую страницу без условной генерации ее содержания. Но это возможно только в том случае, когда автор страницы имеет возможность программировать на машине где установлен сервер и имеет возможность администрировать этот сервер. В ряде случаев, когда место под Website арендуется и в договоре аренды нет пункта, обеспечивающего управление ресурсами сервера, в этом случае программы с условной генерацией содержания страниц бывают чрезвычайно полезными. Другой случай - это работа в локальном режиме без сервера. Здесь JavaScript является единственным средством управления просмотром. Существует еще ряд случаев, когда применение контейнера SCRIPT в теле документа является вполне оправданным, но на них мы остановимся позже в контексте решения конкретных задач управления сценариями просмотра.

Однако, чаще всего, текст JavaScript-кода размещают в виде описания функций в заголовке документа, что делает использование такого кода более удобным. Связано это с двумя моментами, которые следует учитывать при написании JavaScript-программ: область действия описания программы (из каких частей документа или страницы она видна, а следовательно, на нее можно сослаться как на функцию, и принципы интерпретации кода при просмотре документа.

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

Вернемся теперь снова к примеру 2.13, но только разместим теперь код JavaScript не в тексте документа, а в отдельном файле:

Пример 2.14. Размещение скрипта в отдельном файле (netscape.jsc)

	<HTML>
	<HEAD>
	<title>Test of Browser name</title>
	</HEAD>
	<BODY>
	<h1 align=center>Проверка имени типа браузера</h1>
	<hr>
	<script language=JavaScript src=netscape.jsc>
	</script>
	</BODY>
	</HTML>

В данном случае текст условной генерации страницы размещен во внешнем файле. При загрузке страницы этот текст докачивается программой просмотра и исполняется так же, как если бы он размещался в документе. Любопытно, что при просмотре текста документа через опцию "View Source" текст скрипта не отображается, что дает возможность скрыть его содержание от пользователя. В самом файле, который содержит конструкции JavaScript, HTML-таги не используются:

Пример 2.15. Содержание файла netscape.jsc, ссылка на который установлена в атрибуте SCR тага <SCRIPT > из примера 6

	if(window.navigator.appName == "Netscape")
	  {
	   document.write("<br><center><font color=steelblue size=+5>");
	   document.write("У вас хороший навигатор.");
	   document.write("</font></center>");
	  }
	else
	  {
	   document.write("<font color=red size=+3>Необходим Netscape Navigator
		версии 3.0 и выше.</font>");
	   window.alert("Down load new version of your browser now.");
	  }

На этом можно закончить вступительную часть, посвященную примерам JavaScript-кода, и перейти к более планомерному изложению приемов программирования на JavaScript, если бы не одно "но". Дело в том, что любой автор, который собирается излагать программирование на JavaScript, встречается с проблемой постепенного наращивания сложности примеров. Материал надо начинать излагать "от печки", но вот этой самой печки нет. Все программы на JavaScript (Client-site JavaScript) - это в той или иной мере программы обработки событий, которые связаны с теми или иными информационными объектами. Без изучения этих объектов нельзя начинать ничего программировать.

Однако, существует лазейка в этом заколдованном круге, которой мы и воспользуемся. Это схема JavaScript универсального локатора ресурсов (URL). В наших примерах мы уже использовали эту схему. Она помогала нам открывать окно-передупреждение при выборе гипертекстовой ссылки (пример 2.10) и избегать перезагрузки страниц (пример 2.11). Мы будем пользоваться этой схемой вызова JavaScript-кода до тех пор, пока не появится в нашем рассмотрении объект (контейнер HTML) с атрибутом обработки события.

После этого небольшого отступления начнем рассматривать приемы программирования на JavaScript в соответствии с иерархией объектов этого языка, начиная с самого старшего объекта и двигаясь вглубь дерева объектов: от объекта "окно" к элементам формы.

Назад | Содержание | Вперед


Google
WWW CITForum.ru

Подписка на новости библиотеки:

Новые поступления в on-line библиотеку:

4 марта

  • Разработка критериев анализа систем автоматизации тестирования
  • Проблемы математического, алгоритмического и программного обеспечения компьютерной безопасности в Интернет
  • Возможности нападения на информационные системы банка из Интернета и некоторые способы отражения этих атак

    26 февраля

  • Системы обнаружения аномалий: новые идеи в защите информации
  • Средства разработки Java-приложений
  • Особенности работы Delphi с "русским" Excel'ем
  • Использование наследования форм для создания обработчика однотипных операций

    24 февраля

  • Тотальное внедрение: есть ли альтернатива?
  • Наследование типов объектов в Oracle
  • О беспроводных решениях
  • Обязательный Wi-Fi?
  • Стандарт для городских просторов

    19 февраля

  • Жизненный цикл обслуживания продуктов
  • Управление компанией можно довести до автоматизма
  • Вести с магнитных полей
  • Большие ЖК-мониторы для больших целей
  • WINNTик и ШпуNTик или Ставим В2К после В2К3

    17 февраля

  • Внедрение ИС: через тернии к звездам
  • Автоматизация документооборота компании - непростой выбор
  • Использование языка макрокоманд в AllFusion ERwin Data Modeler
  • Flash и CBuilder
  • Оптимизация соединения с Интернет

    12 февраля

  • Англо-русский и русско-английский словарь криптографических терминов
  • Информационная безопасность: экономические аспекты
  • Подход UniTesK к разработке тестов: достижения и перспективы
  • Динамическая поддержка расширений процессора в кросс-системе
  • О некоторых задачах анализа и трансформации программ

    10 февраля

  • Лучшие практические методы администрирования СУБД Oracle9i (часть I)
  • Атака на Windows NT
  • Чем измерить безопасность Интернет?

    Обзоры журнала Computer:

  • Скрытые контракты .NET
  • Web-сервисы: на пути к зрелости

    5 февраля

  • Команда "шаг" в параллельных отладчиках
  • Эвристики распределения задач для брокера ресурсов Grid
  • Серверы от российских разработчиков
  • Технология LaGrande: аппаратная защита будущего
  • Старые песни о главном
    О новых разработках в области полупроводников
  • Время собирать камни
    Обзор элементной базы для построения беспроводных сетей
  • Очипованный мир
    О технологии Radio Frequency IDentification - RFID
  • Киберкрыша
  • Mediation в телекоммуникациях или Что такое предбиллинг

    Все новости >>>

  • IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    Реклама на IT-портале citforum.ru

    Нестандартные PR-акции - pr@citforum.ru
    Пресс-релизы и информация в каталог компаний - manager@citforum.ru
    Комментарии: info@citforum.ru Rambler's Top100 Copyright ©
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.