Онлайн учебники на TEPKA.ru

Учебник по HTML 4

       

Взаимодействие между фреймами в HTML

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

Взаимодействие между фреймами в HTML заключается в возможности загрузки документов в выбранный фрейм по командам из другого фрейма. Для этой цели используется параметр TARGET тега <А>. Данный параметр определяет имя фрейма или окна браузера, в которое будет загружаться документ, на который указывает данная ссылка. По умолчанию при отсутствии параметра TARGET документ загружается в текущий фрейм (или окно). Это умолчание может быть изменено заданием тега <BASE> с нужным значением параметра TARGET. Задание имени фрейма, в который осуществляется загрузка по умолчанию, очень удобно для тех случаев, когда большое количество ссылок должно направлять документы в определенный фрейм. Типичная ситуация с оглавлением в одном фрейме, ссылки из которого загружают соответствующие документы в смежный фрейм, была показана в начале данной главы (рис. 5.1). Для этого примера в разделе <HEAD> файла с именем LIST.htm целесообразно записать следующую строчку: <BASE TARGET="pages">. В противном случае для каждой ссылки пришлось бы указывать параметр TARGET.

Имена фреймов в HTML должны начинаться с латинской буквы или цифры. В качестве имени может задаваться имя существующего окна или фрейма, а может указываться новое имя, под которым будет открыто новое окно. Имеется четыре зарезервированных имени, при задании которых выполняются специальные действия. Эти имена начинаются с символа подчеркивания (_): "_blank", "_self", "_parent" и "_top". Любое другое имя, начинающееся с символа "подчеркивание", недопустимо.

TARGET="_blank" — обеспечивает загрузку документа в новое окно. Это окно не будет иметь имени, а следовательно, в него невозможно будет загрузить другой документ.

TARGET="_self" — загрузка документа будет произведена в текущий фрейм (или окно). Такую запись следует использовать для обхода умолчания, заданного тегом <BASE>.

TARGET="_top" — вызывает загрузку документа в полное окно. Если документ уже располагается в полном окне, то данное значение действует так же, как "_self".

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

Примечание

В ряде источников по языку HTML ошибочно утверждается, что при отсутствии родителя у фрейма значение "_parent" эквивалентно "_self". Такое утверждение не всегда корректно.

Предупреждение

Зарезервированные имена фреймов "_blank", "_self", "_parent" и "_top" должны записываться строчными латинскими буквами. Заметим, что такая требовательность присуща только Netscape. Браузер Microsoft Internet Explorer правильно распознает зарезервированные имена, записанные на любом регистре.

Приведем примеры взаимодействия между фреймами и отдельными окнами браузера. Рассмотрим следующий HTML-код:

<HTML>

<HEAD>

<TITLE>Использование фреймов</TITLE>

</HEAD>

<FRAMESET COLS=2*,*,*>

<FRAME SRC=frame_a.htm NAME="A">

<FRAME SRC=empty.htm NAME="B">

<FRAME SRC=empty.htm NAME="C">

</FRAMESET>

</HTML>

В этом HTML-документе дается описание структуры, состоящей из трех фреймов с именами "А", "B" и "C". Имена фреймов потребуются в дальнейшем для организации ссылок между фреймами. Заметим, что на фрейм с именем "А" в данном примере ссылок не будет, поэтому он мог быть оставлен без имени вообще. При загрузке приведенного выше документа в браузер во фреймах будет отображена информация, содержащаяся в файлах, определяемых параметром SRC. Во фрейм "А" попадет содержимое файла frame_a.htm, а остальные два фрейма получат данные из файла empty.htm, который не имеет отображаемых данных. Еще раз напомним, что HTML-документ, описывающий структуру фреймов, не имеет раздела <BODY>.

Приведем текст файла с именем frame_a.htm:

<HTML>

<HEAD>

<TITLE>Документ для фрейма A</TITLE>

</HEAD>

<BODY>

<A HREF="test.htm" TARGET="B">1. Загрузка документа во фрейм В</А><P>

<A HREF="test.htm" TARGET="C">2. Загрузка документа во фрейм С</А><P>

<A HREF="test.htm" TARGET="D">3. Загрузка документа в окно с именем

D</A><P>

<A HREF="test.htm" TARGET="_blank">4. Загрузка документа в новое окно</А><P>

<A HREF="test.htm" TARGET="_top">5. Загрузка документа в полное окно</А><P>

<A HREF="test.htm" TARGET="_self">6. Загрузка документа в текущий фрейм</А>

</BODY>

</HTML>

Этот документ является полным HTML-документом, имеющий разделы <HEAD> и <BODY> и, в свою очередь, имеет ссылки на файл с именем test.htm, располагающийся в том же самом каталоге, что и файл frame_a.htm.

Текст файла test.htm крайне прост:

<HTML>

<HEAD>

<TITLE>Тестовый документ</TITLE>

</HEAD>

<BODY>

Текст тестового документа

</BODY>

</HTML>

Файл frame_a.htm, содержимое которого загрузилось во фрейм "А", имеет шесть ссылок на один и тот же файл test.htm с различным значением параметра TARGET.

Рассмотрим действия, которые будут происходить при реализации этих ссылок. Первая ссылка со значением TARGET="B" будет загружать файл test.htm во фрейм с именем "в". Заметим, что после реализации любой из шести ссылок браузер Netscape автоматически окрасит в другой цвет все шесть, так как они указывают на один и тот же файл. Microsoft Internet Explorer отмечает только действительно реализованные ссылки.

Вторая ссылка выполнит те же действия для фрейма "C". Изначально во фреймах "B" и "C" ничего нет (точнее загружено содержимое пустого файла empty.htm). Реализация первой и второй ссылок заполнит эти фреймы.

Третья ссылка со значением TARGET=MD" приведет к образованию нового окна браузера с именем "D" и загрузке в него файла test.htm. Заметим, что форма записи этой ссылки ничем не отличается от первых двух. Различие состоит в том, что в первых двух случаях ссылки были даны на существующие фреймы, имена которых были определены в файле со структурой фреймов, а в данном случае ссылка дана на несуществующий объект. Если данная ссылка будет выполнена хотя бы один раз, то окно с именем "D" будет образовано и повторный переход по ссылке лишь перезагрузит данные в существующее теперь окно "D". Конечно, пользователь может в любой момент его закрыть и вновь образовать выбором данной ссылки. На рис. 5.7 показана ситуация после того, как первые три ссылки были реализованы. Напомним, что расположение и размеры окон на экране определяются пользователем.

Взаимодействие между фреймами в HTML

Рис. 5.7. Ситуация, полученная после последовательной реализации первых трех ссылок, имеющихся в левом фрейме

Четвертая ссылка со значением TARGET="_blank" создаст новое окно без имени и загрузит туда требуемый документ. Любое повторение данной ссылки будет открывать еще одно окно браузера.

Пятая ссылка со значением TARGET="_top" загрузит документ в полное окно вместо всей фреймовой структуры. При таком значении параметра TARGET новое окно не образуется. Возврат к фреймовой структуре возможен нажатием кнопки Back.

Последняя ссылка со значением TARGET="_self" загрузит документ во фрейм "А" на место документа со ссылками. В данном случае результат эквивалентен выполнению ссылки без параметра TARGET.

Примечание

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

Совет

Напомним, что названия загружаемых документов задаются тегом <TITLE>. Если документ загружен в полное окно, то его название выдается в самой верхней части окна браузера. Если же документ загружается во фрейм, то его название нигде не отображается, а в верхней части окна по-прежнему будет располагаться название документа, содержащего описание фреймовой структуры документа. Поэтому названия документов, предназначенных для просмотра во фреймах, не имеют большого значения. Например, на рис. 5.7 один и тот же документ загружен во фреймы "в" и "С", а также в отдельное окно с именем "D", при этом название документа видно только в окне "D". Тем не менее, вряд ли стоит рекомендовать опускать названия документов, загружаемых во фреймы, так они могут появиться, например, в списке закладок (Bookmarks) при создании закладки на документ, расположенный во фрейме или списке просмотренных документов.

Рассмотрим еще один интересный пример организации взаимодействия между фреймами и окнами браузера. Пусть имеется текст основного загружаемого HTML-документа:

<HTML>

<HEAD>

<TITLE>Использование имен окон</TITLE>

</HEAD>

<BODY>

<A HREF="test.htm" TARGET="D">Загрузка документа в окно с именем D</A><P>

<A HREF="frame.htm" TARGET="_blank">Загрузка документа, имеющего фреймовую структуру, в новое окно</А><P>

</BODY>

</HTML>

В данном документе имеются ссылки на файлы test.htm и frame.htm. Пусть первый из них содержит ту же информацию, что и в предыдущем примере. Текст файла frame.htm имеет следующий вид:

<HTML>

<HEAD>

<TITLE>Использование фреймов</TITLE>

</HEAD>

<FRAMESET COLS=*,*>

<FRAME SRC=empty.htm NAME="C">

<FRAME SRC=empty.htm NAME="D">

</FRAMESET>

</HTML>

Обратите внимание, что если основной документ является стандартным •HTML-документом, то загружаемый по ссылке из основного документа файл frame.htm содержит структуру фреймов и в свою очередь ссылается на файл empty.htm.

После загрузки основного документа окно браузера будет иметь вид, показанный на рис. 5.8 (левое окно). Весь документ состоит из двух ссылок. Выполним переход по первой ссылке. Будет образовано новое окно с именем "D", в котором появится текст файла test.htm (рис. 5.8, правое окно). Повторение этой ссылки будет лишь перезагружать данные в окне "D".

Взаимодействие между фреймами в HTML

Рис. 5.8. Пример окон взаимодействующих фреймов

Выполним переход по второй ссылке. Образуется новое окно без имени, в которое загрузится файл frame.htm, определяющий два фрейма с именами "С" и "D" (рис. 5.8, нижнее окно). В обоих фреймах ничего нет (точнее загружен пустой документ empty.htm). Обратим внимание, что теперь имеется открытое окно с именем "D" и окно с фреймами, один из которых также имеет имя "D". Выполним снова переход по первой ссылке. В отличие от первого случая загрузка данных будет осуществляться не в окно "D", а во фрейм с именем "D". Результат всех описанных действий показан на рис. 5.8.

Примечание

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

Если же изменить порядок действий, т. е. сначала выполнить вторую ссылку, а затем первую, то окно с именем "D" вообще не появится! Это произойдет потому, что после реализации второй ссылки образуется фрейм с именем "D" и для первой ссылки не будет нужды открывать новое окно.

Этот пример вовсе не является образцом для подражания, а лишь показывает возможную сложность организации взаимодействия. Напротив, нужно стараться без особой нужды не усложнять организацию данных, тем более не создавать ситуаций, в которых результат меняется в зависимости от порядка действий пользователя.

Совет

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

Предупреждение

Имена фреймов и окон сравниваются с учетом регистра символов. Так, например, фреймы с именами "frame_1" и "Frame_1" будут различны.

 

 

 

Top.Mail.Ru
Top.Mail.Ru