WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Г \ Листинг 16.6 содержит код установки фреймов, ли стинг 16.7 показывает код для нижнего фрейма, кото ным. Нельзя ссылаться на другой объект вне его кон текста, например, на другое окно.

Pages:     | 1 |   ...   | 3 | 4 || 6 | 7 |   ...   | 10 |

«тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с другими ...»

-- [ Страница 5 ] --

обычно возникает необходимость в предварительной получения такого поведения (см. листинг 14.1) по обработке данных, введенных пользователем, во избежа- требуется добавить обработчики событий onFocus каж ние проблем проверки допустимости при отправке дан- дому из объектов Text и Textarea:

ных серверу. В то время как submit служит для провер Листинг 14.1. Использование события onFocus для ки сразу всех полей формы, событие change обычно полей формы.

наиболее важно для проверки допустимости на уровне

 First Name: 

type=text Предположим, что необходимо добавить базовую под программу проверки допустимости данных в форму вво да данных для заказа шляпы Kakata. Скажем, требуется гарантия того, что содержимое поля "State" записано

maxlength=25 size= Company:

function ( Street Address:

сти ввода указанного объекта.

type=text size= Выход из фокуса raaxlength= Событие (противоположность события focus) вызы вается, когда объект теряет фокус.

maxlength= Как и с обработчиком событий 1. и последующие версии расширяют возможности onBlur, включая его в качестве обработчика событий для объектов Window, Frame и Frameset. Для каж Zip дого из этих объектов обработчик событий onBlur действие, которое должно выполниться, size= когда окно теряет фокус.

Обработчик событий OnBlur должен помещаться в дескриптор объектов Window, Frame или

type=text size= Например, предположим, что для формы ввода дан maxlength= ных нужна гарантия, что пользователь не оставил пус тым объект Такую проверку можно добавить в обработчик событий onBlur данного объекта. Посколь type=text ку она воздействует на одно поле формы, можно доба size= вить JavaScript-код только к определению объекта Text:

size= must enter size= Если пользователь попытается убрать фокус из объекта без ввода текста в данное поле, сигнальное ди

Несложно заметить, что и onBlur — очень (this) похожие обработчики событий. Возникает вопрос о том, rows=3 когда нужно использовать один, а когда другой. OnChange больше подходит для проверки или анализа содержимого объекта и обладает преимуществом в том, что не вызы вается при изменении значения пользователем. С дру Хотя можно написать отдельные обработчики собы гой стороны, для обязательных полей лучше использо тий для каждого из это будет нерациональным вать onBlur.

подходом, если только процессы не оказываются совер Важно понять правильный порядок следования об шенно разными. Вместо этого в методе работчиков событий onChange, onBlur и onFocus. Как пользуются преимуществом ключевого слова this для показано на рис. 14.4, onFocus происходит при входе в ссылки на вызывающий объект. Приведенная ниже фун поле. При выходе из него вызывается onChange, затем кция тогда будет использоваться в качестве глобальной onBlur и, наконец, обработчик onFocus следующего для всех объектов:

входного объекта. Имейте в виду, что код, который до function selectContents (fieldObject) ( бавляется (например, в обработчик событий onChange), может воздействовать на обработчик событий onBlur того I же самого объекта. Другими словами, использовать эти Когда один из объектов Text или Textarea вызывает три события следует с особой осторожностью.

метод метод использует параметр Управление событиями Глава mouseOver и позволяет изменять в строке со First Name First Name стояния текст по умолчанию.

Обработчики событий onMouseOver и также поддерживаются объектом Area в 1. и версиях.

Событие mouseOver генерируется, когда пользователь помещает курсор мыши поверх объекта Link или Area.

Как и следовало ожидать, onMouseOut ведет себя таким же образом, за исключением того, что событие проис ходит, когда курсор уводится из Link или Area. Обработ чики событий onMouseOver и onMouseOut этих объек V тов могут затем изменять заданное по умолчанию onFocus поведение браузера. Если необходимо установить свой ства status и defaultStatus окна, следует возвратить в об РИСУНОК 14.4. Порядок следования событий от одного работчик событий значение true.

объекта Text до другого объекта Text.

Например, предположим, что требуется отобразить следующий текст в строке состояния, когда для ссылки Выделение текста (onSelect) на шляпу Kakata генерируется событие mouseOver:

Следующее JavaScript событие — событие select, кото Click here to get the whole story about the рое происходит, когда пользователь выделяет текст в Legend объекте Text или Textarea. Обработчик событий onSelect Для отображения данного текста добавьте в дескрип этих объектов выполняет JavaScript-код или вызывает тор Link обработчик событий onMouseOver:

указанную функцию.

<а Независимо от способа реализации, возможности события select довольно ограничены, и большинству of оно вообще может не понадобиться.

Метод updateStatusBar() определяется таким обра Перемещение мыши по объектам зом:

(onMouseOver и // обработчик onMouseOver function { Опытный пользователь Web, вероятнее всего, будет ожи = here to get the whole дать, что перемещение мыши по тексту ссылок отобра story about the Legend of зит место назначения ссылки (обычно URL-адрес). Од return true нако, несмотря на то, что опытные пользователи хотят видеть URL-адрес, начинающие пользователи предпоч Все рассмотренные в главе примеры содержатся в ли бы вместо этого увидеть нечто менее прозаическое.

файле Register.htm. Листинг 14.2 дает полный исходный Это особенно актуально в intranet-средах, где URL-ад код для этих примеров.

рес обычно значительно менее понятен. Захват событий Листинг 14.2. Исходный код для Register.htm.

Hat

If you would like more information on the of Kakata, please fill out the following form.

Использование DOM Часть III Второй способ — отображать временное сообщение My own browser text поверх заданного по умолчанию текста. Фактически, это сообщение обычно появляется, когда пользователь про дуцирует событие, например, перемещая мышь. Это со можно устанавливать с помощью свойства status.

Рисунок 15.9 иллюстрирует использование свойств defauItStatus и status.

http://www.acadians.com т • РИСУНОК 15.7 Новое окно отображает содержимое, введенное пользователем.

URL p РИСУНОК 15.9. свойств defauItStatus и status.

Код для этой страницы показывает три действия для изменений сообщения в строке состояния. Сначала при веденный ниже набор кодов устанавливает заданное по умолчанию при открытии окна:

= "Welcome to the Во-вторых, когда пользователь переходит на ссыл ку "Go", ее обработчик событий onMouseOver вызыва РИСУНОК 15.8 ввод.

ет следующую функцию:

function { Работа с сообщениями строки = "Click me to go to the Software home состояния I Строка состояния браузера может оказаться важным В-третьих, чтобы изменить текст заданного по умол средством взаимодействия с пользователем. Здесь чанию сообщения состояния, пользователь может выб можно задействовать два свойства объекта Window, рать одно из сообщений объекта Select. Когда вызыва и status, для управления отображенным ется обработчик событий onClick кнопки "Change", он текстом.

вызовет следующую функцию:

Вообще говоря, использовать строку состояния мож но двумя способами. Первый способ — отображать за- function { = данное по умолчанию сообщение в строке состояния.

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

Листинг 15.7 содержит полный исходный код этого примера.

Объект Window Глава многое — как в окнах, так и в оди ночных. Объекты Frame, Location и History являются В этой главе детально исследовался верхний уровень свойствами объекта Window и обеспечивают средства иерархии JavaScript-объектов. Рассмотренные объекты для работы с соответствующими экземплярами браузе скорее с различными аспектами окна браузе- ра. В этой главе также обсуждалось применение JavaScript pa, нежели с HTML-дескрипторами. Как объект верх- для ссылок на объекты и свойства в других фреймах и уровня в иерархии, объект Window отвечает за окнах браузера.

Листинг Status.htm. _

= "Welcome to the large URL function { = "Click me to go to the Acadia Software home function { = }

ontx/p>

To change the default status message, select a message from the list below and click the Change button.

ный набор объектов включает в себя ключевой клиент ский объект Document и три его "дочерних" объекта: Объект Document — решающий во время работы с Link, Anchor и Image. JavaScript и HTML, поскольку все действие происходит на Web-странице в пределах документа. Таким образом, придется ссылаться на объект Document при ссылке на Объект Document один из внутри него. Например, при обраще Объект Window является объектом самого высокого нии к объекту Form с именем в ссылке по уровня для клиентских JavaScript-объектов. В этой роли требуется указать document:

он служит в качестве контейнера, но фактически может содержать не все подряд. Содержимое Web-документа Если этого не сделать, JavaScript не сможет помес оставлено для объекта Document. Объект Document иг тить объект на страницу.

рает роль JavaScript-эквивалента HTML-документа и используется в качестве метода доступа к своим дочер Программное создание HTML-документов ним объектам.

В этой роли объект Document является контейнером Как видно из этой книги, JavaScript можно использо для всех HTML-объектов, которые соотносятся с деск- вать для ответа на события, сгенерированные на стати рипторами и . Объект Document получает ческих Web-страницах. Можно также использовать значение свойства title из дескриптора (располо- и для визуальной генерации HTML-страниц. Фактичес женного в разделе ) и несколько связанных с ки, каждый из методов объекта Document используется цветом свойств из раздела , который приведен для запрограммированных изменений документов:

здесь:

• открывает поток для и Его параметром может быть один из при веденных ниже типов MIME (text/html — по умол ] чанию):

] text/html Объект Document Глава text/plain мента без полной перегрузки окна. Следующие разде image/gif лы описывают три допустимых метода, с ко торых можно создавать HTML-документы.

(любой Netscape) Разработка документа в текущем окне • записывает выражение Новый документ можно создавать в текущем окне при JavaScript в документ.

его загрузке. Этот код обычно размещают внутри деск • также записывает выра рипторов либо в разделе , либо отдель жение JavaScript в документ, но добавляет после вы но, если это возможно. Например, если требуется оп ражения символ новой строки.

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

ному в листинге Листинг 16.1. Генерация разного текста на Web В то время как методы ореп() и close() открывают странице в зависимости от типа браузера.

или закрывают сгенерированный документ, методы a На рис. показан результат в Navigator 4, а на -File рис. 16.3 — в Internet Explorer 5.

Return to the home page.

• Welcome Navigator user.

We are you came to our Web site. Do you how we knew your type?

РИСУНОК 16.1. Генерация ссылки с помощью Одно ключевое ограничение, которое следует иметь в виду при использовании или связано с тем, что нельзя изменять содержимое текущего доку РИСУНОК 16.2. Настроенная страница в браузере Navigator.

Использование DOM (var i = 0;

i < len;

i++) { + I Welcome Internet Explorer user.

} We are glad you to our Web site. Don't you wish how knew your type?

Information" ., РИСУНОК 16.3. Настроенная страница в браузере Internet Explorer.

Создание документа в фрейме Info:

Возможна также генерация нового документа в другом • • фрейме мультифреймового окна. Этот метод подобен • Netscape Netscape Plug-in приведенному ранее, но здесь необходимо ссылаться на • Тата Plug-in 1.2.2 for Netscape Navigator • Java 1 2.2 for Navigator with 2 (DLL Helper) нужный документ, используя точечную нотацию. На 1 a 2 for 1 2 (DLL Helper) пример, для ссылки на первый фрейм мультифреймо • Netscape Plug-in • вого окна используется следующий код:

• Sound Player for Netscape • QuickTime Win Листинг 16.8, который будет приведен ниже в гла ве, демонстрирует пример программной установки до кумента в фрейме.

РИСУНОК 16.4. Генерация нового в отдельном окне.

Создание документа в отдельном окне Изменение цвета документа Третья методика визуального создания документов свя- Установки цветов документов по умолчанию определе зана с открытием нового окна и записью в него созда- ны в конфигурации пользовательского браузера, одна ваемого документа. Если необходимо привести в отдель- ко HTML обеспечивает возможность изменения этих ном окне список установленных в браузере Navigator установок, а в JavaScript можно сделать это программ подключаемых модулей, применяется код, показанный но. Объект Document имеет пять свойств, которые пред в листинге 16.2. ставляют цвета различных атрибутов в документе Рисунок 16.4 демонстрирует результаты работы сце- aLinkCoIor, bgColor, fgColor, LinkColor и vLinkCoIor.

нария в браузере Navigator. Описание этих свойств сведено в табл.

Эти свойства выражаются либо в виде строковых Листинг 16.2. Отображение списка подключаемых литералов, либо в виде шестнадцатиричных RGB-зна модулей Navigator.

чений. Например, если требуется назначить для фона документа цвет "chartreuse", используют литерал стро ки chartreuse:

Возможно, миром правит любовь, однако WWW-миром правят ссылки. HTML-ссылки — основные элементы любого документа сети, позволяющие переходить на положение документа несущественно;

он может нахо Select Color:

диться на том же самом сервере либо за тысячи кило

показывает три фрейма в окне Internet Explorer после вы Software полнения всего процесса.

ВШИ • 1) 3) of JavaScript РИСУНОК информации об с помощью массива ссылок.

(var i = 0;

< len;

i++) { + 1) + +

Center Однако, выполняемый код должен быть

пользовательского браузера, как показано в следующем

should not have

код для данного примера, а рис. 16.7 — результат пос ле щелчка на ссылке "Part Объект Document Глава Листинг 16.9. Создание оглавления со ссылками _ 5 тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с Part I: Getting Started with JavaScript

1) JavaScript and the World Wide Web 2) How JavaScript and HTML Work Together 3) Assembling Your JavaScript Toolkit

Chapters 4-7, you will learn about language control structures, operators, and

Part II: The JavaScript Language

4) of the JavaScript 5) Control Structures and Looping
6) Functions

15 rounds out the discussion on objects, focusing on how you can create your own. It many innovative ideas related to custom object development within

Part III: JavaScript

3) Fundamentals of Object-Orientation Handling Events
10) JavaScript Built-in Object Model 11) Navigator Objects 12) Document Objects 13) Form Objects 14) Built-in Language Objects
15) Creating Custom JavaScript Objects

19 looks at yet another key topic, cookies and other techniques for handling and state in the stateless environment of the

Part IV: JavaScript

16) Enhancing Forms with JavaScript
17) Working with Frames and Windows
18) Scripting Outlines and Table of Contents
19) Cookies Samp;

State Maintenance Part V: JavaScript on the

20) Server-Based JavaScript 21) Partitioning Client and Server Applications 22) Error Handling and Debugging in JavaScript 23) Working with Netscape Plug-ins
24) ActiveX Scripting with JavaScript 25) VRML and Multimedia 26) JavaScript and Web Security

«In this section, we will look at Java from a JavaScript perspective in Chapter 27 and see «how similar or different the language is for Chapter 28 provides a good «introduction on how to build a Java applet, while Chapter 29 is where the rubber meets the «road when it focuses on integrating Java and JavaScript.

Part VII: Java and JavaScript

27) Java from a JavaScripter Perspective
28) Building Java Applets
29) Integrating JavaScript with Java

«As a result, how JavaScript can access data will be an increasingly important topic as the «technology In this section, we will look at how you can work with data both on the «client-side and server-side. Chapter 30 introduces the notion of maintaining lookup tables «on the client side to lessen the need to access the server. Chapter 31 then gets into how «you can use JavaScript to access server-side data. LiveWire and IntraBuilder will again be «used in this

Part VIII: JavaScript Database Applications

30) Using Tables in JavaScript 31) Working with Server-Side Database Objects

Part IX: Appendixes

A) JavaScript Language Summary B) Fundamentals of HTML C) Comparing JavaScript with VBScript
D) JavaScript Resources on the Internet

Объект Document Глава I I ! I: l.

| 4) of 5) and Looping 6) 7) Part ] 8) Fundamentals of 9) Handling Events 10) Object Model > РИСУНОК 16.7. Щелчок на ссылке отображает сигнального сообщения. СОВЕТ Дополнительная информация о событиях объекта Image находится в главе 14.

Объект Anchor часто объект Link используется для перехода Например, для вывода изображения dot.gif в HTML на другую Web-страницу или другое место в текущем коде необходимо воспользоваться следующим синтак документе. В пределах текущего документа ссылка ука- сисом:

зывает на место в тексте, которое называется якорем

Экземпляр объекта Image создается с помощью ко <а манды new:

> CompanyLogo = new = Размеры графического элемента можно передавать сказать, что объект Anchor — поистине гость как параметры в конструктор Image(). Например, если для JavaScript. С помощью якорей в JavaScript можно требуется отобразить логотип размером 200x300 пиксе сделать немногое. Сам по себе объект Anchor не имеет лов, используется код:

никаких свойств, методов или событий. Единственный CompanyLogo = new Image способ его применения в JavaScript — с помощью мас = сива anchors объекта Document. Массив используется для определения количества якорей в Присваивая значение свойству src, можно изменять отображаемый графический элемент. Однако, при этом документе и выполнения необходимых итераций по ним. в область загрузится новый или гра фический элемент.

Поскольку изображение определяется только с по Объект Image мощью дескриптора , создаваемый объект Image обладает достаточно ограниченными возможностями.

Его можно использовать для изображения до Объект Image поддерживается в JavaScript 1.1 и сле того, как оно станет фактически необходимо для пока дующих версиях. Его не поддерживают JavaScript и JScript 1.O.

за на дисплее. Поскольку изображение в этом случае хранится в памяти, при документа оно бу дет намного быстрее отображаться. Наиболее общий Тем, кто провел достаточно много времени в Web, должно быть, понятно, насколько важна для Web гра- пример — анимационная последовательность изображе ний, которые получаются с использованием объекта фика. Едва ли существуют страницы, вообще не имею Image и позже отображаются из памяти.

щие графических элементов. Объект Image, новый в Navigator 3, представляет HTML-изображение, которое определяется в следующем формате:

Использование DOM Часть ментов. К таким объектам относятся Document, Link, В главах 20 и 21 можно найти дополнительную инфор- Anchor и Image. Хотя JavaScript используется для рас мацию по способам применения объектов Image.

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

Объекты документа, рассмотренные в этой главе, явля ются JavaScript-эквивалентами ряда базовых HTML-эле Объекты Form В ГЛАВЕ Объект Объект Text Объекты Button: Submit, Reset и Button Объект Checkbox Объект Radio Объект Select Объект Password Объект Hidden пользователем происходит с помощью HTML-формы.

Одним из ключевых достижений в развитии Web было появление HTML-форм в мире статических стра- Таким образом, JavaScript-объект Form — важный ниц. За счет форм Web фактически может обеспечить объект в объектной модели JavaScript. С самим объек нечто большее, нежели однонаправленный режим свя- том Form не многое можно сделать. Выражаясь кратко, зи. Формы предоставляют средства, с помощью которых объект Form — это контейнер, содержащий введенные любой пользователь на любой машине сможет передать пользователем данные.

В HTML объект Form определяется так:

данные на сервер для обработки.

Благодаря JavaScript, HTML-формы получают гораз до более широкие возможности. Теперь можно не толь ] ] ко предварительно обрабатывать данные формы до от ] правки их пользователю, но также использовать формы | POST] в приложении, которое полностью находится на сторо ] не клиента. В главе рассматривается объект и мно- me ] > жество объектов, которые он может содержать, включая объекты Text, Button, Radio и Select. Цель этой главы Для определения формы используют стандартные предоставить вкратце всю информацию, касающуюся условные обозначения HTML:

форм, и в то же время дать несколько действительно < FORM NAME = полезных советов.

Кроме того, можно воспользоваться примерами этой METHOD=GET > главы в качестве шаблонов, что поможет сэкономить Здесь должны следовать объекты --> время при разработке сайтов. Для копирования шаблона нужно просто посмотреть на листинги и на их общую структуру, и затем подкорректировать код под собствен.

ные потребности. Все больше и больше разработчиков Дополнительная информация по использованию форм следуют этому рецепту, а данная глава предоставляет в JavaScript находится в главе 29.

изрядное число подходящих шаблонов.

ПРИМЕЧАНИЕ Отправка формы на сервер Объекты Form, обсуждаемые в этой главе, могут су только в пределах формы, но не вне ее.

До JavaScript единственное реальное назначение HTML формы состояло в отправке на сервер элементов данных, собранных на стороне клиента. Поскольку на стороне Объект Form клиента не было достаточно возможностей для обработ Одна из основных целей JavaScript — обеспечить сред- ки данных, они посылались серверу, который затем ства для взаимодействия с пользователем на стороне реагировал на полученную информацию. JavaScript по клиента. В большинстве случаев это взаимодействие с зволяет теперь передавать обработку данных HTML Использование DOM Часть III формам, хотя это не устраняет потребность отправки POST. Этот параметр основан на процессе со сто формы на сервер. роны сервера, поэтому при проектировании HTML Можно отправлять форму, используя один из двух форм необходимо учитывать требования программы процессов. Во-первых, можно вызвать метод submit() сервера. Следующий код показывает пример исполь объекта Form, а во-вторых — нажать на кнопку "Submit", зования параметра method.

которая автоматически отправит соответствующую ей var форму.

= alert ("The method type for this form is: + ПРИМЕЧАНИЕ methodType) В главе приводится дополнительная информация по • target (то же, что и параметр Свойство реализации с помощью JavaScript проверки допустимо target определяет целевое окно, которому сервер дол сти данных перед отправкой формы на сервер.

жен послать ответную информацию. Если свойство Многие из свойств объекта Form работают с допол- target не определено, сервер отображает результаты нительной информацией, которую форма отправляет на в окне, отправившем форму. Если используется сервер. Эти свойства перечислены ниже: мультифреймовое окно, свойство target определяет ся для фрейма с помощью параметра NAME деск • action (то же, что и параметр ACTION=). Свойство риптора Можно также использовать action определяет сервера, куда отправляется одно из следующих зарезервированных имен окон:

форма.

_top, _parent, _self или Но не забывайте, что это спецификация HTML, а не JavaScript. Нельзя указывать JavaScript-имя объекта Window, такое как Это обычно программа приложение LiveWire parent.resultsWindow. Следующий код или файл IntraBuilder JFM.

пример использования этого свойства:

• enctype (то же, что и параметр Свой- if ( = ) ство enctype определяет формы.

else { Значение по умолчанию — = ) urlencoded:

HTML-форма, показанная в листинге 17.1, исполь if зует для отправки формы комбинацию HTML-дескрип { торов и JavaScript-кода. Обратите внимание, что свой type is ) ство action объекта Form получает новое значение в • method (то же, что и параметр METHOD=). Свой течение события объекта Form, если пользо ство method определяет, каким образом форма от ватель установил флажок в "Rush Order". Программная правляется серверу. Наиболее часто применяется установка свойства action отменяет его значение по значение GET, однако можно использовать также и умолчанию.

Листинг 17.1.

5 тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с Это может показаться странным, но свойство в этом примере не используется. Хотя мож но присваивать значение свойству форма

Online Registration

при этом не изменяется. Поэтому следует использовать свойство value (см. листинг 17.4).

Browser size= Registration В последнем примере всякий раз, когда пользователь нем holder, а текущее значение holder — в объект щелкает на метод postData() помещает Это значение затем используется, когда пользователь текущее значение переключателя в объект Hidden с име- нажимает на кнопку "Undo Last", в результате чего вы бирается соответствующий переключатель.

Объекты Form Глава Во втором примере переменные holder и определены глобально в начале сценария. Сценарий использует эти переменные вместо ссылок на объекты Hidden.

Резюме Формы играют важную роль в JavaScript. Помимо того, что появляется возможность классифицировать и обра батывать данные до их отправки на сервер, HTML-фор мы можно также использовать для создания клиентских приложений, использующих JavaScript. В этой главе рассматривался объект Form и различные объекты, ко торые могут существовать внутри него. Кроме того, были показаны способы отправки формы на сервер и методы РИСУНОК 17.12. Сохранение последнего значения с помощью работы и проверки значений введенных данных до от объекта Hidden.

правки данных на сервер.

Объекты В ГЛАВЕ Frame Location History Navigator В этой главе обсуждается объект Frame и огромное а также просматривать большое количество документов число его применений при создании Web-сайтов. Для одновременно. Можно выбирать для просмотра различ начала стоит рассмотреть создание одиночных и муль- ные файлы изображений, используя меню. Для отобра окон и связанные с ними методы, свой- жения расширенного вида документа можно открывать ства и события. Затем можно перейти к распространен- новое окно, которое будет закрываться, когда оно боль ным объектам, таким как объекты Navigator и History. ше не нужно. Фреймы также обеспечивают возможность Их предшественник — это, конечно же, известный ре- слайдовой демонстрации. Использование и реализация позитарий для регистрации пользовательских взаи- мультифреймового сайта ограничены только воображе модействий и адресов посещенных страниц, который по- нием его автора.

зволяет получать информацию касательно текущего Например, окно могло бы содержать несколько про браузера. Эта глава может показаться достаточно длин- кручиваемых фреймов, которые указывают на некоторые ной, однако, следует помнить, что она и должна содер- URL, которые, в свою очередь, могут указывать на фрей жать большое количество необходимых разделов, посвя- мы. Объекты Frame создаются с помощью дескрипторов щенных фреймам и окнам. внутри дескрипторов и они будут, по сути, объектами Window, от которых и унасле дуют все методы и свойства. Для получения дополнитель Объект Frame ной информации относительно этих методов, свойств и Фреймы были введены еще в Netscape Navigator 2.0. общего поведения можно обратиться в главу 15.

Фрейм (frame) — это подокно полного окна браузера;

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

структуры информация покидает область отображе Каждый фрейм может содержать отдельный документ ния, особенно в случае маленького монитора. Авто (HTML, текст, изображение и пр.), каждый фрейм име- ру сайта необходимо удостовериться, что использо вание фреймов удобно для посетителей;

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

них. Можно также загружать документы во фреймы без воздействия на документы в других фреймах. существенно расширяет возможности сай Фреймы обеспечивают средства просмотра и вза- та с фреймами и многое добавляет в способы взаимодей имодействия с сайтом, который не доступен другим ствия сайта с пользователями. Можно программно от способом. Они позволяют постоянно отображать нави- крывать и закрывать новые окна. Можно обновлять и гационное подокно, которое обеспечивает быстрый и синхронизировать фреймы с помощью сценария без уча эффективный поиск требуемых страниц сайта. Можно стия серверной программы. Карты изображений и ссыл одновременно отображать входные и выходные формы, ки могут быть динамическими, т.е. изменяющимися в Объекты Frame Глава зависимости от различных конфигураций и применений frames: Window сайта. Документы в различных фреймах и окнах могут взаимодействовать друг с другом и передавать дру гу информацию. have Сетевые ресурсы, касающиеся JavaScript и находятся на сайте Netscape по адресу / Реальная выгода фреймов заключается в возможно СОВЕТ сти обеспечивать постоянное навигационное меню сай та. Вместо прыжков с одной страницы на другую пользо- Выравнивание дескрипторов не является необходимым, но часто делается с целью обеспече ватель может выбрать страницу из меню, и она появится ния лучшего вида программы и для демонстрации в другом (главном) фрейме. Оглавление может отобра иерархии фреймов в коде. Некоторые HTML-редак жаться в одном фрейме, а документы — в другом. Можно торы выравнивают дескрипторы автоматически, они разместить фрейм с кнопочной с одной сторо- могут также окрашивать некоторые фрагменты кода для лучшей читаемости.

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

Дескриптор имеет атрибут для описания СОВЕТ способа разделения окна на фреймы. Этим атрибутом Использование фреймов имеет и некоторые недостат может быть COLS или ROWS (для столбцов или строк), ки. Главный недостаток связан с уменьшением обла но не оба сразу. Разработчик определяет количество сти отображения каждого документа. Пользователям строк или столбцов фреймов в окне и размеры каждого с небольшими мониторами, портативными или карман фрейма. Для каждой строки или столбца может опреде ными компьютерами будет сложно в подробностях рассмотреть некоторые документы в фреймах. Непло- лятся либо абсолютный размер в пикселах, либо отно хим выходом может оказаться создание наряду с фрей сительный размер в процентах от окна, либо размер мовой также и нефреймовой версии сайта и предос вычисляется как остаток от окна после установки дру тавление всем пользователям возможности просмотра гих фреймов. Следующая строка создает два фрейма в выбранной версии (с помощью JavaScript это сделать виде столбцов, один размером 60% от окна, а другой — довольно-таки просто).

в оставшейся части окна (указан с помощью в дан Объект Frame, по сути, аналогичен объекту Window, ном случае этот размер составляет и с ним работают подобными же методами. В случае одиночного окна объект Window представляет собой Следующая строка кода создает снова два фрейма, но объект самого высокого уровня. В случае фреймов окно без использования знака процента. Абсолютная шири самого высокого уровня считается родительским, а его на первого фрейма — 60 пикселов:

дочерние окна считаются объектами Frame.

Создание фреймов Как и прежде, второй фрейм создается в оставшейся Фреймы создаются с помощью дескрипторов части окна.

и определяются дескрипторами Следующая строка создает четыре фрейма в виде столбцов;

три фрейма занимают по 30% ширины экра на каждый, а четвертый — оставшуюся часть:

В данном случае можно заменить знак на Для последнего фрейма использовать необязательно.

Однако, если размеры всех фреймов определяются че рез проценты, в сумме они должны составлять 100% ширины окна.

Следующая строка кода создает два фрейма в виде За счет добавления нескольких строк кода можно строк, первый размером 70% высоты окна, а второй — '.

легко создать окно с тремя фреймами:

Использование DOM Часть III Размеры фрейма можно задавать с помощью сочета- AUTO отображает полосу прокрутки только, если ния абсолютных, относительных размеров и остатка, но документ по размерам превышает фрейм. Значение если полный размер всех фреймов не равен размеру по умолчанию для SCROLLING — AUTO.

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

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

равных фрейма, каждый размерами в треть высоты окна:

Изменять размеры фреймов, которые имеют атрибут NORESIZE, нельзя.

Дескрипторы СОВЕТ Атрибуты дескриптора определяют доку Если это возможно, лучше не определять атри мент, который будет загружаться в фрейм, имя фрей- бут, т.е. разрешить изменять размеры фрейма.

ма, границы фрейма, полосу прокрутки и опции изме нения размеров. Все следующие атрибуты дескриптора — необязательны: Следующий фрагмент кода присваивает фрейму имя 1, загружает документ, устанавливает боковые • Атрибут SRC — URL (относительный или абсолют границы в 5 пикселов, верхние и нижние границы в ный) документа, который будет загружаться во пикселов, всегда отображает полосу прокрутки и не раз фрейм. Документ может быть получен с того же сер решает изменять размеры фрейма:

вера в виде фреймового файла или с другого серве ра. Если атрибут SRC не используется, фрейм будет < SRC = NAME = пустым. Это пустое пространство можно заполнить SCROLLING =YES NORESIZE> чем угодно, особенно, если для записи содержимого в фрейм воспользоваться JavaScript. Netscape и Microsoft предоставляют расширенные возможности в браузерах последних версий. Посетите • Атрибут NAME, если определен, обеспечивает сред web-сайты этих компаний, на которых находится более ства для ссылки на фрейм из другого фрейма, а так подробная информация (соответственно же из JavaScript. JavaScript может также ссылаться на home.netscape.com/ и фрейм через массив frames, который рассматривает При использовании фреймов не ся далее в главе. Значение атрибута NAME должно обходимо рассмотреть обработку событий, отлаживая начинаться с алфавитно-цифрового символа.

JavaScript-код или подстраивая его под целевой браузер.

• Границы фрейма устанавливаются с помощью двух JavaScript-события, наиболее часто встречаемые как в атрибутов, и MARGINHEIGHT:

Microsoft Explorer, так и в Netscape Navigator, сведены в табл.

• Атрибут MARGINWIDTH управляет боковыми границами фрейма. Этот атрибут может прини мать значение в пикселах, начиная с единицы. Размещение дескрипторов Максимальное значение ограничено только разме Дескрипторы и обычно раз ром фрейма. (Невозможно установить границы мещают в теле документа. Однако, в некоторых версиях таким образом, чтобы не осталось места для ото Netscape Navigator помещение их между бражения документа.) и не позволяет браузеру прочесть • Атрибут MARGINHEIGHT аналогичен дескрипторы . Поскольку дескрипторы MARGINWIDTH за исключением того, что он необязательны, дескрипторы управляет верхней и нижней границами.

размещают после раздела документа, а деск рипторы опускают, как показано ниже:

• Если не указаны значения MARGINWIDTH и MARGINHEIGHT, браузер выбирает для них значения по умолчанию.

• Атрибут SCROLLING определяет полосу прокрут ки для фрейма. Значениями для SCROLLING мо-

Frame Глава JavaScript-события и фреймы.

Объект Событие Описание Окно или фрейм dragdrop Пользователь выбрал объект в окне.

error Окно загружено с ошибкой.

focus Окно получило фокус.

load Окно загружено.

Move Окно было перемещено.

Resize Окно было изменено.

unload Пользователь покинул окно.

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

файл может содержать только Некоторые разработчики фактически дублируют глав дескрипторы и как ный документ сайта внутри дескрипторов показано в следующем фрагменте. (Открывающий и для безфреймовой версии. обычно нет не закрывающий дескрипторы <TITLE> — единственные обходимости использовать подобную методику, дескрипторы, которые по требованиям спецификации с помощью JavaScript можно создавать фреймовую HTML должны присутствовать в каждом HTML-доку- версию сайта для тех же самых страниц, которые ото бражаются в браузерах, не поддерживающих фрей менте.) Интересно отметить, что дескрипторы <BODY> мож но заключать в дескрипторы исполь зуя атрибуты background, bgcolor, text и т.п. для без фреймовой версии документа. Браузер, не Дескриптор поддерживающий фреймы, игнорирует Многие авторы устанавливают также дескрипторы и начинает выполнять раздел <BODY> с первого изве для отображения сообщений в браузе- стного ему дескриптора (т.е. с дескриптора <BODY>) рах, не использующих фреймы: внутри дескрипторов Поддерживаю щий фреймы браузер инициализирует раздел <BODY> в первом дескрипторе и игнорирует со код и содержимое для в не поддерживающих фреймы держимое дескриптора Конечно, под держивающий фреймы браузер загружает документы, Содержимое может включать в себя как HTML-дес- указанные дескрипторами дескрипторы <BODY> этих документов таким браузером крипторы, так и текст. Поддерживающий фреймы браузер игнорирует информацию между дескрипто- распознаются.</p><p> рами и тогда как Вложенные фреймы браузер, не поддерживающий фреймы, игнорирует и но ото- Можно создавать вложенные фреймы, в которых фрейм бражает информацию, находящуюся между дескрипто- будет разделен еще на несколько других фреймов. Су ществует два разных способа создания вложенных фрей рами и Дескрипторы мов, оба они обеспечивают похожие результаты. Одна размещают внутри дескрипторов ко, возникает различие в иерархии фреймов и в способах ссылок на вложенные фреймы.</p><p> Следующий код создает фреймы с структурой в одном родительском окне. На рис.</p><p> показаны фреймы, а на рис. 18.2 — структура (иерархия) этих фреймов.</p><p> код и содержимое для отображения в не поддерживающих фреймы Использование DOM Часть III В коде для все три фрейма — дочерние фрей мы одного и того же верхнего окна. В коде, создающем фреймы на рис. только для фреймов framel и родительским окном является верхнее окно, a и frame4 — это дочерние фреймы окна По этой причине ссылаться на данные фреймы необходимо по разному, и эти различия будут рассматриваться в следу ющих разделах.</p><p> Parent is Parent is Parent is Parent is т Parent is TopWindow is РИСУНОК 18.1. Создание структуры в.. [ одном родительском окне.</p><p> В.</p><p> РИСУНОК 18.3. Создание фреймов с мулыпифреймовой Top Window структурой в двух окнах.</p><p> Г Top Window framel frame РИСУНОК 18.2. Иерархия фреймов в одном родительском frame окне.</p><p> I Следующий код создает фреймы с frame структурой в двух окнах. (Фрейм тоже можно считать ок РИСУНОК 18.4. Иерархия фреймов с мультифреймовой ном.) На рис. 18.3 показаны эти фреймы, а на рис. 18. структурой в двух окнах.</p><p> - их иерархия.</p><p> Добавление JavaScript-кода ко фреймам Файлы с наборами фреймов и большинство файлов до кументов, которые отображаются в фреймах — это Файл содержит следующую дополни- HTML-файлы. Таким образом, в них можно использо вать JavaScript, как это делалось в других HTML-фай тельную информацию для установки фреймов:</p><p> лах. Единственное отличие связано с тем, что здесь JavaScript ссылается и на свойства других документов, находящихся в фреймах, а также использует определен ные особенности ссылок на эти свойства.</p><p> На верхнее окно и его фреймы необходимо ссылать ся с учетом их иерархических отношений. В ссылке на Эти два фрагмента кодов создают фреймы, которые окно могут быть указаны свойства Window, такие как выглядят совершенно одинаково, как показано на рис.</p><p> top, parent, window и self. Свойство top ссылается на 18.1 и 18.3. Однако, структуры этих фреймов, как мож главное окно (окно браузера), a parent — на но заметить из рис. 18.2 и 18.4, — полностью различны.</p><p> фреймовое окно, в котором содержится текущий фрейм.</p><p> Frame Глава Для фреймов, содержащихся в верхнем окне, parent и Ь2 = Ы + 1;</p><p> top представляют собой одно и то же. Свойства self и return window ссылаются на текущий фрейм или окно.</p><p> I Рассмотрим следующий код: // </SCRIPT> <BODY> f > Для ссылок на переменную al и функцию addAl() из Файл frame2.html содержит следующую дополнитель framel, или используют или ную информацию для установки фреймов в окне:</p><p> parental, и, соответственно, либо Однако, для ссылок из frame4 или можно исполь зовать только top.al и т.к. parent ссылается на На переменную Ы и функцию addBl() из и можно ссылаться с помощью и Родительским окном для frame 1, и является окно top, т.к. все эти фреймы в вер Хочется надеяться, что все это не выглядит слиш хнем окне. Родительским окном для и ком запутанно. Дополнительные способы ссылок на раз будет frame2, поскольку эти два фрейма находятся в окне личные фреймы и окна будут обсуждаться в разделе Если необходимо сослаться на верхнее окно из "Ссылки на фреймы" далее в главе.</p><p> документа, содержащегося в используют свой При работе с фреймовыми документами и JavaScript ство top;</p><p> для ссылки на — свойство parent;</p><p> и, на необходимо соблюдать некоторые предосторожности.</p><p> конец, для ссылки на собственный фрейм данного до Сценарий может выполняться ошибочно, если фрейм кумента применяются свойства self или window.</p><p> содержит некорректный документ или даже вообще не На функции, переменные и другие свойства можно содержит документа.</p><p> ссылаться с помощью свойств Window:</p><p> Попытка сослаться на top.al из любого документа в предыдущем примере приведет к если документ отсутствует во фрейме. Однако, JavaScript предлагает средства для предотвращения таких ошибок;</p><p> такие сред граммы остановится на половине пути, если программа не сможет найти необходимую переменную. Кроме того, проблема может возникнуть по причине неполной заг рузки документа. Синхронизация фреймов гарантирует, что загрузка фреймов и документов будет завершена прежде, чем в них возникнет необходимость, либо же будут предприниматься альтернативные действия.</p><p> Проверка допустимости фреймов Файл содержит следующую дополнитель ную информацию для установки фреймов в окне: Часто проблема возникает, когда страница содержит JavaScript-код, который дает просматри вать документы в фреймах или без них. Свойство window.length обычно применяется для JavaScript- реше <SCRIPT ния о просмотре документов в виде фреймов. Свойство length хранит количество фреймов, содержащихся в окне.</p><p> Использование DOM Часть III Можно предусмотреть условный оператор, который ис- который в данном случае ссылаются). Если структура полняет какое-либо действие, если будут использоваться фрейма неправильна, вычисление условия фреймы: ется, и никаких дальнейших действий не предпринима ется либо же предпринимаются альтернативные дей != О ) { ствия. Если структура фрейма корректна, но неправилен are being документ, сценарий не инициирует никаких действий I либо реализует альтернативные действия. Если никакие Обычно вместо window используют top или parent, дальнейшие действия не предпринимаются, программа поскольку window подразумевает фрейм, содержащий просто остается в текущей позиции, разрешая пользо внутри код (если документ не является вателю продолжать выполнение других действий или файлом для установки других фреймов). Если окно или повторить неудавшееся действие. (Возможно, страница фрейм содержат фреймы, значение их свойства length не была до конца загружена, и следующая попытка заг будет больше нуля. Однако, если записать символ рузки окажется успешной.) Альтернативные действия (для "больше"), то в старых браузерах он может быть могут включать обеспечение сигнала для пользователя, ошибочно интерпретирован как завершающий символ загрузку правильной страницы и продолжение работы HTML-комментария, поэтому предпочтительнее исполь или же продолжение действия с пропуском шагов, тре зовать символы ("не равно").</p><p> бующих обращений к отсутствующему документу.</p><p> Применение короткого цикла с оператором if помо Предыдущий пример проверял простую фреймовую жет избежать ошибок, если документ, не находящийся структуру (три фрейма). Можно проверять корректность во фрейме, попытается сослаться на переменную из дру и более сложных структур, используя массив frames раз гого фрейма или мультифреймового окна. Если верхнее личных окон в составном операторе if. Составной опе мультифреймовое окно содержит переменную кото ратор if проверяет структуру сверху вниз, в противном рая используется в операторе if в соответствие с создан случае ссылка на отсутствующий фрейм вызовет ошиб ным документом, ошибка возникнет при просмотре дан ку. Рассмотрим следующую строку программы:</p><p> ного документа в автономном нефреймовом виде.</p><p> Однако, если свойство length, заранее проверенное в [1] [1]=3)...</p><p> условном выражении, равно false, то оператор if завер шает работу, предотвращая возникновение ошибки из Если часть фреймовой структуры не существует, опе за попытки обращения к несуществующей переменной.</p><p> ратор if останавливает работу в этой точке и сценарий Первая часть следующего оператора, != выполняет альтернативное действие либо не выполняет О, равна false, когда фреймы не используются, так что никаких действий вообще.</p><p> дальнейшее выполнение останавливается и ошибка не В ходе проверки наличия правильного документа код возникает:</p><p> может проверять помимо заголовка и другие свойства, например, фрейма. Вместо проверки заго if( != 0) && x ) ) ловка документа или другого свойства можно присваи Проверка правильности загрузки документов вать общей переменной в каждом документе уникальное имя или номер и затем проверять эту идентифицирую Для синхронизации фреймов были разработаны различ щую документ переменную.</p><p> ные методы, некоторые из них довольно просты, в то время как другие — гораздо сложнее. Один из самых Регистрация документов простых методов использует JavaScript для проверки наличия необходимого документа в данном фрейме пе- Простая проверка присутствия требуемого документа в ред продолжением выполнения остальной части кода. случае больших сайтов может стать слишком сложной, Массив frames позволяет определять фрейм как элемент в этом случае проверку полной зафузки документа мож массива. (В разделе "Ссылки на окна и фреймы" далее в но не проводить. Другой выход из ситуации состоит в этой главе можно найти дополнительную информацию том, чтобы сами документы уведомляли, загружены ли относительно массива frames.) Рассмотрим следующую они. Используя события и доку строку кода:</p><p> менты регистрируют свое присутствие в переменной topWindow или в cookie-набора. Следующий код пока == 3) [1] зывает, что нет необходимости использовать заголовок == "My ) для идентификации документа;</p> <div class="po5"></div> <div class='stranici1'><b class='temiser'>Pages:</b> &nbsp;&nbsp;&nbsp;&nbsp;|<a class="kn1" href="/1/40984-1-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 1 </a>| &nbsp; ... &nbsp; |<a class="kn1" href="/1/40984-3-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 3 </a>|<a class="kn1" href="/1/40984-4-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 4 </a>|<div class='kr'><a class="kn1" href="/1/40984-5-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 5 </a></div>|<a class="kn1" href="/1/40984-6-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 6 </a>|<a class="kn1" href="/1/40984-7-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 7 </a>| &nbsp; ... &nbsp; |<a class="kn1" href="/1/40984-10-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 10 </a>|</div> <div class="separator2"></div> <div class="po122"> <img class="doc" src="/images/doc.gif" border="0" alt="" ><a class="menusil" href="/1/" title=""><b class="jir">Книги, научные публикации</b></a> </div> <div class="niz2"> <br><br> <noindex> <center> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- dislib-kvadrat (niz) --> <ins class="adsbygoogle" style="display:inline-block;width:336px;height:280px" data-ad-client="ca-pub-9894471784993021" data-ad-slot="3110193131"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center> </noindex> <br> <div class="naverh"><A href="#verh" >наверх</a><img src="/images/s.gif" hspace="3" width="5" height="11" border="0" alt="" align="top" vspace="3" ></div> </td></tr></table> <table width="100%" cellspacing="0" cellpadding="0" border=0> <tr> <td bgcolor="#CCCCFF" height="1"> </td> </tr> <tr> <td class="menu-niz"> <center> <table cellspacing="0" cellpadding="0" border=0> <tr> <td class="menu-niz1">&nbsp;|&nbsp; • <a href="/" title="На главную">Главная</a> &nbsp;|&nbsp; • <a href="/admin/contact-kontakti-dissertatsii.php" title="Контакты">Контакты</a>&nbsp;|&nbsp; </td> </tr> </table> </center> </td> </tr> <tr><td class="line1"></td> </tr> </table></td><td class="line"><img class="lin" src="/images/spaser1.gif" border="0" alt=""></td></tr></table> </td><td valign="top"> <table width="5" border="0" cellspacing="0" cellpadding="0"> <tr> <td></td></tr></table></td></tr></table> </td><td class="site2"></td></tr><tr><td colspan="3"> <noindex> <script type='text/javascript' src='http://recreativ.ru/rcode.97536708c5.js'></script> <script type='text/javascript' src='http://recreativ.ru/rcode.88aa634d1b.js'></script> <script type='text/javascript' src='http://recreativ.ru/rcode.30746632cd.js'></script> </noindex> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top" class="cap1"> <font color="#808080">© 2011 www.dissers.ru - «Бесплатная электронная библиотека»<br><br> <noindex> Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам. <br> Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, <a href="/admin/contacts.php" title="">напишите нам</a>, мы в течении 1-2 рабочих дней удалим его. </noindex> </font> </div> </td> </tr> </table> <noindex> <!-- Yandex.Metrika counter --> <script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script> <script type="text/javascript"> try { var yaCounter78166 = new Ya.Metrika({id:78166,type:1}); } catch(e) { } </script> <noscript><div><img src="//mc.yandex.ru/watch/78166?cnt-class=1" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> </noindex></td></tr></table> </body> </html>