Глава 1. Теоретическая основы темы «Возможности JavaScript»
Введение
Язык программирования, как и любой другой язык (естественный, например), предназначен для коммуникации, то есть связи между говорящим и слушающим. В программировании говорящим является программист, а слушателем — интерпретатор языка, некоторая компьютерная программа, понимающая этот язык и выполняющая действия в соответствии с тем, что она поняла. Было время, когда считалось, что для облегчения общения с компьютером необходимо создать язык, достаточно близкий к естественному. Эта идея, в конечном счете, не выдержала испытаний временем, хотя и породила несколько прекрасных языков программирования. Часто бывает, что побочные эффекты некоей деятельности превосходят ожидания.
Целью работы является разработка HTML приложений с применением языка JavaScript.
Определили задачи исследования:
1. Проанализировать литературу по теме исследования и смежным темам
2. Рассмотреть основные теоретические понятия JavaScript
3. Разработать приложение с применением JavaScript
Решение поставленных задач потребовало привлечения следующих методов исследования: анализ, разработка приложения.
Глава 1. Теоретическая основы темы «Возможности JavaScript»
Понятие объектной модели применительно к JavaScript
Для создания механизма управления страницами на клиентской стороне было предложено использовать объектную модель документа. Суть модели в том, что каждый HTML-контейнер - это объект, который характеризуется тройкой:
· свойства;
· методы;
· события.
Объектную модель можно представить, как способ связи между страницами и браузером. Объектная модель - это представление объектов, методов, свойств и событий, которые присутствуют и происходят в программном обеспечении браузера, в виде, удобном для работы с ними кода HTML и исходного текста сценария на странице. Мы можем с ее помощью сообщать наши пожелания браузеру и далее - посетителю страницы. Браузер выполнит наши команды и соответственно изменит страницу на экране.
Объекты с одинаковым набором свойств, методов и событий объединяются в классы однотипных объектов. Классы - это описания возможных объектов. Сами объекты появляются только после загрузки документа браузером или как результат работы программы. Об этом нужно всегда помнить, чтобы не обратиться к объекту, которого нет.
Свойства
Многие HTML-контейнеры имеют атрибуты. Например, контейнер якоря <A ...>...</A> имеет атрибут HREF, который превращает его в гипертекстовую ссылку:
<A HREF=intuit.htm>intuit</A>
Если рассматривать контейнер якоря <A ...>...</A> как объект, то атрибут HREF будет задавать свойство объекта "якорь". Программист может изменить значение атрибута и, следовательно, свойство объекта:
document.links[0].href="intuit.htm";
Не у всех атрибутов можно изменять значения. Например, высота и ширина графической картинки определяются по первой загруженной в момент отображения страницы картинке. Все последующие картинки, которые заменяют начальную, масштабируются до нее. Справедливости ради следует заметить, что в Microsoft Internet Explorer размер картинки может меняться.
Для общности картины свойствами в JavaScript наделены объекты, которые не имеют аналогов в HTML-разметке. Например, среда исполнения, называемая объектом Navigator, или окно браузера, которое является вообще самым старшим объектом JavaScript.
Методы
В терминологии JavaScript методы объекта определяют функции изменения его свойств. Например, с объектом "документ" связаны методы open(),write(), close(). Эти методы позволяют сгенерировать или изменить содержание документа. Приведем простой пример:
function hello()
{
id=window.open("","example","width=400, height=150");
id.focus(); id.document.open();
id.document.write("<H1>Привет!</H1>");
id.document.write("<HR><FORM>");
id.document.write("<INPUT TYPE=button VALUE='Закрыть окно' ");
id.document.write("onClick='window.opener.focus();
window.close();'>");
id.document.close();
}
В этом примере метод open() открывает поток записи в документ, метод write() осуществляет эту запись, метод close() закрывает поток записи в документ. Все происходит так же, как и при записи в обычный файл. Если у окна есть поле статуса (обычно в нем отображается уровень загрузки документа), то при незакрытом потоке записи в документ в нем будет "метаться" прямоугольник продолжения записи, как это происходит при загрузке документа.
События
Кроме методов и свойств объекты характеризуются событиями. Собственно, суть программирования на JavaScript заключается в написании обработчиков этих событий. Например, с объектом типа button (контейнер INPUT типа button - "Кнопка") может происходить событие click, т.е. пользователь может нажать на кнопку. Для этого атрибуты контейнера INPUT расширены атрибутом обработки события click - onClick. В качестве значения этого атрибута указывается программа обработки события, которую должен написать на JavaScript автор HTML-документа:
<INPUT TYPE=button VALUE="Нажать" onClick=
"window.alert('Пожалуйста, нажмите еще раз');">
Обработчики событий указываются в тех контейнерах, с которыми эти события связаны. Например, контейнер BODY определяет свойства всего документа, поэтому обработчик события завершения загрузки всего документа указывается в этом контейнере как значение атрибута onLoad.
Примечание. Строго говоря, каждый браузер, будь то Internet Explorer, Netscape Navigator или Opera, имеет свою объектную модель. Объектные модели разных браузеров (и даже разные версии одного) отличаются друг от друга, но имеют принципиально одинаковую структуру. Поэтому нет смысла останавливаться на каждой из них по отдельности. Мы будем рассматривать общий подход применительно ко всем браузерам, иногда, конечно, заостряя внимание на различиях между ними.
URL-схема JavaScript
Схема URL (Uniform Resource Locator) - это один из основных элементов Web-технологии. Каждый информационный ресурс в Web имеет свой уникальный URL. URL указывают в атрибуте HREF контейнера A, в атрибте SRC контейнера IMG, в атрибуте ACTION контейнера FORM и т.п. Все URL подразделяются на схемы доступа, которые зависят от протокола доступа к ресурсу, например, для доступа к FTP-архиву применяется схема ftp, для доступа к Gopher-архиву - схема gopher, для отправки электронной почты - схема smtp. Тип схемы определяется по первому компоненту URL: http://intuit.ru/directory/page.html .В данном случае URL начинается с http - это и есть определение схемы доступа (схема http).
Основной задачей языка программирования гипертекстовой системы является программирование гипертекстовых переходов. Это означает, что при выборе той или иной гипертекстовой ссылки вызывается программа реализации гипертекстового перехода. В Web-технологии стандартной программой является программа загрузки страницы. JavaScript позволяет поменять стандартную программу на программу пользователя. Для того чтобы отличить стандартный переход по протоколу HTTP от перехода, программируемого на JavaScript, разработчики языка ввели новую схему URL - JavaScript:
<A HREF="JavaScript:JavaScript_код">...</A>
<IMG SRC="JavaScript:JavaScript_код">
В данном случае текст "JavaScript_код" обозначает программы-обработчики на JavaScript, которые вызываются при выборе гипертекстовой ссылки в первом случае и при загрузке картинки - во втором. Например, при нажатии на гипертекстовую ссылку Внимание!!! можно получить окно предупреждения Рис 1.1:
<A HREF="JavaScript:alert('Внимание!!!');"> Внимание!!!</A>
Окно предупреждения. Рис. 1.1.
А при нажатии на кнопку типа submit в форме можно заполнить текстовое поле этой же формы:
<FORM NAME=f METHOD=post
ACTION="JavaScript:window.document.f.i.VALUE=
'Нажали кнопку Click';void(0);">
<TABLE BORDER=0>
<TR>
<TD><INPUT NAME=i></TD>
<TD><INPUT TYPE=submit VALUE=Click></TD>
<TD><INPUT TYPE=reset VALUE=Reset></TD>
</TABLE>
</FORM>
В URL можно размещать сложные программы и вызовы функций. Следует только помнить, что схема JavaScript работает не во всех браузерах, а только в версиях Netscape Navigator и Internet Explorer, начиная с четвертой.
Таким образом, при программировании гипертекстового перехода интерпретатор получает управление после того, как пользователь "кликнул" по гипертекстовой ссылке.
Обработчики событий
Такие программы, как обработчики событий (handler), указываются в атрибутах контейнеров, с которыми эти события связаны. Например, при нажатии на кнопку происходит событие click:
<FORM><INPUT TYPE=button VALUE="Кнопка" onсlick=
"window.alert('intuit');"></FORM>
Подстановки
Подстановка (entity) встречается на Web-страницах довольно редко. Тем не менее это достаточно мощный инструмент генерации HTML-страницы на стороне браузера. Подстановки используются в качестве значений атрибутов HTML-контейнеров. Например, как значение по умолчанию поля формы, определяющего домашнюю страницу пользователя, будет указан URL текущей страницы:
<SCRIPT>
function l()
{
str = window.location.href;
return(str.length);
}
</SCRIPT>
<FORM><INPUT VALUE="&{window.location.href};" SIZE="&{l()};">
</FORM>
<SCRIPT>
<!-- Это комментарий ...JavaScript-код...// -->
</SCRIPT>
<BODY>
... Тело документа ...
</BODY>
</HTML>
HTML-комментарии здесь вставлены для защиты от интерпретации данного фрагмента страницы HTML-парсером в старых браузерах (у высокого начальства еще встречаются). В свою очередь, конец HTML-комментария защищен от интерпретации JavaScript-интерпретатором (// в начале строки). Кроме того, в качестве значения атрибута LANGUAGE у тега начала контейнера указано значение "JavaScript". VBScript, который является альтернативой JavaScript - это скорее экзотика, чем общепринятая практика, поэтому данный атрибут можно опустить - значение "JavaScript" принимается по умолчанию.
Очевидно, что размещать в заголовке документа генерацию текста страницы бессмысленно - он не будет отображен браузером. Поэтому в заголовок помещают декларации общих переменных и функций, которые будут затем использоваться в теле документа. При этом браузер Netscape Navigator более требовательный, чем Internet Explorer. Если не разместить описание функции в заголовке, то при ее вызове в теле документа можно получить сообщение о том, что данная функция не определена. Приведем пример размещения и использования функции:
<HTML>
<HEAD>
<SCRIPT>
function time_scroll()
{
var d = new Date();
window.status = d.getHours() +":"+d.getMinutes() +":"+
d.getSeconds();
setTimeout('time_scroll();',500);
}
</SCRIPT>
</HEAD>
<BODY onLoad=time_scroll()>
<CENTER>
<H1>Часы в строке статуса</H1>
В Internet Explorer 4.0 подстановки не поддерживаются, поэтому пользоваться ими следует аккуратно. Прежде чем выдать браузеру страницу с подстановками, нужно проверить тип этого браузера.
В случае подстановки интерпретатор получает управление в момент разбора браузером (компонент парсер) HTML-документа. Как только парсер встречает конструкцию &{..} у атрибута контейнера, он передает управление интерпретатору JavaScript, который, в свою очередь, после исполнения кода — это управление возвращает парсеру. Таким образом данная операция аналогична подкачке графики на HTML-страницу.
1.7 Вставка (контейнер SCRIPT - принудительный вызов интерпретатора)
Контейнер SCRIPT - это развитие подстановок до возможности генерации текста документа JavaScript-кодом. В этом смысле применение SCRIPT аналогично Server Side Includes, т.е. генерации страниц документов на стороне сервера. Однако здесь мы забежали чуть вперед. При разборе документа HTML-парсер передает управление интерпретатору после того, как встретит тег начала контейнера SCRIPT. Интерпретатор получает на исполнение весь фрагмент кода внутри контейнера SCRIPT и возвращает управление HTML-парсеру для обработки текста страницы после тега конца контейнера SCRIPT.
Контейнер SCRIPT выполняет две основные функции:
· размещение кода внутри HTML-документа;
· условная генерация HTML-разметки на стороне браузера.
Первая функция аналогична декларированию переменных и функций, которые потом можно будет использовать в качестве программ переходов, обработчиков событий и подстановок. Вторая - это подстановка результатов исполнения JavaScript-кода в момент загрузки или перезагрузки документа.
Тест на JavaScript
Поставлена задача разработать приложения с использованием JavaScript. Для этого нам необходимо создать HTML страницу, в ней создать форму тестовых заданий (Вопрос – вариант ответа). Выбор варианта ответа будет производиться с помощью компонента RadioBox.
<h3>Информацию, не зависящую от личного мнения или суждения, называют 2</h3>// Создаем заголовок из вопроса
<div align="left"><p style="margin-left: 100"><strong>// Положение RadioBox
<input name="q2" type="radio" value="21">понятной<br>
<input name="q2" type="radio" value="22">полезной<br> - Варианты ответа
<input name="q2" type="radio" value="23">объективной<br>
<input name="q2" type="radio" value="24">актуальной<br>
Так же на тестовой странице присутствуют кнопки, их устанавливаем с помощью компонента button. С помощью кнопок будет производиться подсчет правильных вариантов ответов и очистки формы теста.
Тест показан на Рис 2.1 где можно увидеть все то, что приведено выше.
Форма теста. Рис.2.1
Программный код
Ниже приведен программный код данного теста.
<HTML>
<HEAD>
<TITLE>Тема:"Информация"</TITLE>
<script language="JavaScript">
<!-- Hide JavaScript from Java-Impaired Browsers
function dataBase(test) {
var counter=0;
if (test.q1[0].checked) {counter++;}
if (test.q2[2].checked) {counter++;}
if (test.q3[3].checked) {counter++;}
if (test.q4[3].checked) {counter++;}
if (test.q5[1].checked) {counter++;}
if (test.q6[2].checked) {counter++;}
if (test.q7[1].checked) {counter++;}
if (test.q8[1].checked) {counter++;}
if (test.q9[1].checked) {counter++;}
if (test.q10[3].checked) {counter++;}
if (test.q11[2].checked) {counter++;}
if (test.q12[2].checked) {counter++;}
if (test.q13[1].checked) {counter++;}
if (test.q14[3].checked) {counter++;}
if (test.q15[2].checked) {counter++;}
document.test.display.value = counter;
}
// End Hiding Script -->
</script>
</HEAD>
<BODY bgcolor=#23781>
<center>
<form action="remove_it?subject=Answer on test questions" method="post" name="test">
<!--ENCTYPE="text/plain"-->
<H2>Тема:"Информация"</H2>
<HR width=75%>
<h3>Информацию, изложенную на доступном для получателя языке, называют 1</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q1" type="radio" value="11">понятной<br>
<input name="q1" type="radio" value="12">достоверной<br>
<input name="q1" type="radio" value="13">актуальной<br>
<input name="q1" type="radio" value="14">полезной<br>
</strong></p>
</div><hr>
<h3>Информацию, не зависящую от личного мнения или суждения, называют 2</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q2" type="radio" value="21">понятной<br>
<input name="q2" type="radio" value="22">полезной<br>
<input name="q2" type="radio" value="23">объективной<br>
<input name="q2" type="radio" value="24">актуальной<br>
</strong></p>
</div><hr>
<h3>Информацию, отражающую истинное положение дел, называют: 3</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q3" type="radio" value="31">полезной<br>
<input name="q3" type="radio" value="32">полной<br>
<input name="q3" type="radio" value="33">объективной<br>
<input name="q3" type="radio" value="34">достоверной<br>
</strong></p>
</div><hr>
<h3>Информацию, существенную и важную в настоящий момент, называют 4</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q4" type="radio" value="41">полной<br>
<input name="q4" type="radio" value="42">объективной<br>
<input name="q4" type="radio" value="43">достоверной<br>
<input name="q4" type="radio" value="44">актуальной<br>
</strong></p>
</div><hr>
<h3>По способу восприятия человек различает следующие виды информации: 5</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q5" type="radio" value="51">математическую, биологическую, медицинскую, психологическую и пр.<br>
<input name="q5" type="radio" value="52">визуальную, звуковую, тактильную, обонятельную, вкусовую<br>
<input name="q5" type="radio" value="53">обыденную, производственную, техническую, управленческую<br>
<input name="q5" type="radio" value="54">научную, социальную, политическую, экономическую, религиозную и пр.<br>
</strong></p>
</div><hr>
<h3>Наибольший объём информации человек получает при помощи 6</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q6" type="radio" value="61">органов обоняния<br>
<input name="q6" type="radio" value="62">органов осязания<br>
<input name="q6" type="radio" value="63">органов зрения<br>
<input name="q6" type="radio" value="64">органов слуха<br>
</strong></p>
</div><hr>
<h3>Аудиоинформацией называют информацию, которая воспринимается посредством 7</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q7" type="radio" value="71">органов обоняния<br>
<input name="q7" type="radio" value="72">органов слуха<br>
<input name="q7" type="radio" value="73">органов зрения<br>
<input name="q7" type="radio" value="74">органов осязания (кожей)<br>
</strong></p>
</div><hr>
<h3>Звуковая информация передаётся посредством 8</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q8" type="radio" value="81">знаковых моделей<br>
<input name="q8" type="radio" value="82">звуковых волн<br>
<input name="q8" type="radio" value="83">световых волн<br>
<input name="q8" type="radio" value="84">электромагнитных волн<br>
</strong></p>
</div><hr>
<h3>Тактильную информацию человек получает посредством 9</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q9" type="radio" value="91">органов слуха<br>
<input name="q9" type="radio" value="92">органов осязания<br>
<input name="q9" type="radio" value="93">барометра<br>
<input name="q9" type="radio" value="94">термометра<br>
</strong></p>
</div><hr>
<h3>По форме представления информацию можно условно разделить на следующие виды: 10</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q10" type="radio" value="101">математическую, биологическую, медицинскую, психологическую и пр.<br>
<input name="q10" type="radio" value="102">визуальную, звуковую, тактильную, обонятельную, вкусовую<br>
<input name="q10" type="radio" value="103">обыденную, научную, производственную, управленческую<br>
<input name="q10" type="radio" value="104">текстовую, числовую, символьную, графическую, табличную и др.<br>
</strong></p>
</div><hr>
<h3>Примером текстовой информации может служить 11</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q11" type="radio" value="111">чертеж<br>
<input name="q11" type="radio" value="112">картина<br>
<input name="q11" type="radio" value="113">стихотворение в учебнике «Родная речь»<br>
<input name="q11" type="radio" value="114">школьный учебник<br>
</strong></p>
</div><hr>
<h3>Укажите «лишний» объект с точки зрения способа представления информации: 12</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q12" type="radio" value="121">чертеж<br>
<input name="q12" type="radio" value="122">картина<br>
<input name="q12" type="radio" value="123">телефонный разговор<br>
<input name="q12" type="radio" value="124">фотография<br>
</strong></p>
</div><hr>
<h3>К средствам хранения звуковой информации можно отнести: 13</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q13" type="radio" value="131">газету<br>
<input name="q13" type="radio" value="132">кассету с рок-музыкой<br>
<input name="q13" type="radio" value="133">журнал<br>
<input name="q13" type="radio" value="134">учебник по литературе<br>
</strong></p>
</div><hr>
<h3>К средствам передачи аудиоинформации можно отнести: 14</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q14" type="radio" value="141">газету<br>
<input name="q14" type="radio" value="142">плакат<br>
<input name="q14" type="radio" value="143">журнал<br>
<input name="q14" type="radio" value="144">радио<br>
</strong></p>
</div><hr>
<h3>Примером хранения числовой информации может служить: 15</h3><div align="left"><p style="margin-left: 100"><strong>
<input name="q15" type="radio" value="151">графическое изображение на экране монитора<br>
<input name="q15" type="radio" value="152">текст песни<br>
<input name="q15" type="radio" value="153">таблица значений функции<br>
<input name="q15" type="radio" value="154">иллюстрация в журнале<br>
</strong></p>
</div><hr>
<table>
<tr>
<td colspan="3"><div align="center"><p><strong><br><hr>Нажми на кнопку для завершения теста:</strong></td></div>
</tr>
<tr align="center">
<td><strong><input name="check" onclick="dataBase(this.form)" type="button"
value=" Подсчитать баллы "></strong></td>
<td><strong><textarea cols="5" name="display" rows="1" wrap="VIRTUAL"></textarea></strong></td>
<td><strong><input type="reset" value=" Сбросить ответы "></strong></td>
</tr>
</table>
</form></center>
<p align=center><strong>Подведем итоги. Если Вы набрали:<br>
<center>
<ul>
Критерии оценки
<li>до 8 Удовлетворительно<li>9-12- Хорошо<li>ровно 13-15 Отлично</ul>
<br>
</center>
</strong></p>
<hr align="center">
<center>
</BODY>
</HTML>
Для запуска данного теста, необходимо запустить web-документ test.html с помощью Web-браузера (Internet Explorer 4.x,Opera, Netscape).
Описание 1-го блока
<HTML>
<HEAD>
<TITLE>Тема:"Информация"</TITLE>
<script language="JavaScript">
<!-- Hide JavaScript from Java-Impaired Browsers
function dataBase(test) {
var counter=0;
if (test.q1[0].checked) {counter++;}
if (test.q2[2].checked) {counter++;}
if (test.q3[3].checked) {counter++;}
if (test.q4[3].checked) {counter++;}
if (test.q5[1].checked) {counter++;}
if (test.q6[2].checked) {counter++;}
if (test.q7[1].checked) {counter++;}
if (test.q8[1].checked) {counter++;}
if (test.q9[1].checked) {counter++;}
if (test.q10[3].checked) {counter++;}
if (test.q11[2].checked) {counter++;}
if (test.q12[2].checked) {counter++;}
if (test.q13[1].checked) {counter++;}
if (test.q14[3].checked) {counter++;}
if (test.q15[2].checked) {counter++;}
document.test.display.value = counter;
}
// End Hiding Script -->
</script>
</HEAD>
<BODY bgcolor=#23781>
<center>
<form action="remove_it?subject=Answer on test questions" method="post" name="test">
<!--ENCTYPE="text/plain"-->
В данном блоке, описываем счетчик правильных ответов. И вывод их результата. Так же тут можно указать цвет текста и фона.
Так же в первом блоке указываются вопросы теста и варианты ответов.
Описание 2-го блока
<td colspan="3"><div align="center"><p><strong><br><hr>Нажми на кнопку для завершения теста:</strong></td></div>
</tr>
<tr align="center">
<td><strong><input name="check" onclick="dataBase(this.form)" type="button"
value=" Подсчитать баллы "></strong></td>
<td><strong><textarea cols="5" name="display" rows="1" wrap="VIRTUAL"></textarea></strong></td>
<td><strong><input type="reset" value=" Сбросить ответы "></strong></td>
</tr>
</table>
</form></center>
<p align=center><strong>Подведем итоги. Если Вы набрали:<br>
<center>
<ul>
Критерии оценки
<li>до 8 Удовлетворительно<li>9-12- Хорошо<li>ровно 13-15 Отлично</ul>
<br>
</center>
</strong></p>
<hr align="center">
<center>
</BODY>
</HTML>
Во втором же блоке, описаны кнопки очистки и подведения итогов (количество правильных ответов). Так же указаны критерии оценки.
Список используемой литературы
1. Дэвид Флэнаган - JavaScript: The Definitive Guide
2. Николас Закас – JavaScript для профессиональных веб-разработчиков
3. Энциклопедический сайт – с ссылкой на статью о JavaScript: https://ru.wikipedia.org/wiki/JavaScript
Введение
Язык программирования, как и любой другой язык (естественный, например), предназначен для коммуникации, то есть связи между говорящим и слушающим. В программировании говорящим является программист, а слушателем — интерпретатор языка, некоторая компьютерная программа, понимающая этот язык и выполняющая действия в соответствии с тем, что она поняла. Было время, когда считалось, что для облегчения общения с компьютером необходимо создать язык, достаточно близкий к естественному. Эта идея, в конечном счете, не выдержала испытаний временем, хотя и породила несколько прекрасных языков программирования. Часто бывает, что побочные эффекты некоей деятельности превосходят ожидания.
Целью работы является разработка HTML приложений с применением языка JavaScript.
Определили задачи исследования:
1. Проанализировать литературу по теме исследования и смежным темам
2. Рассмотреть основные теоретические понятия JavaScript
3. Разработать приложение с применением JavaScript
Решение поставленных задач потребовало привлечения следующих методов исследования: анализ, разработка приложения.
Глава 1. Теоретическая основы темы «Возможности JavaScript»